Según reactjs.org, componentWillMount no será compatible en el futuro.
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
No hay necesidad de usar componentWillMount.
Si desea hacer algo antes de montar el componente, simplemente hágalo en el constructor ().
Si desea hacer solicitudes de red, no lo haga en componentWillMount. Es porque hacer esto conducirá a errores inesperados.
Las solicitudes de red se pueden hacer en componentDidMount.
Espero eso ayude.
actualizado el 08/03/2019
La razón por la que solicita componenteWillMount es probablemente porque desea inicializar el estado antes de los renders.
Solo hazlo en useState.
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
o tal vez desee ejecutar una función en componentWillMount, por ejemplo, si su código original se ve así:
componentWillMount(){
console.log('componentWillMount')
}
con hook, todo lo que necesita hacer es eliminar el método del ciclo de vida:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
Solo quiero agregar algo a la primera respuesta sobre useEffect.
useEffect(()=>{})
useEffect se ejecuta en cada render, es una combinación de componentDidUpdate, componentDidMount y ComponentWillUnmount.
useEffect(()=>{},[])
Si agregamos una matriz vacía en useEffect, se ejecuta justo cuando se monta el componente. Esto se debe a que useEffect comparará la matriz que le pasó. Por lo tanto, no tiene que ser una matriz vacía, puede ser una matriz que no cambia. Por ejemplo, puede ser [1,2,3] o ['1,2']. useEffect todavía solo se ejecuta cuando se monta un componente.
Depende de usted si desea que se ejecute solo una vez o después de cada renderizado. No es peligroso si olvidó agregar una matriz siempre que sepa lo que está haciendo.
Creé una muestra para hook. Por favor, míralo.
https://codesandbox.io/s/kw6xj153wr
actualizado el 21/08/2019
Ha sido blanco desde que escribí la respuesta anterior. Hay algo a lo que creo que debes prestarle atención. Cuando usas
useEffect(()=>{},[])
Cuando reacciona compara los valores que pasó a la matriz [], utiliza Object.is () para comparar. Si le pasa un objeto, como
useEffect(()=>{},[{name:'Tom'}])
Esto es exactamente lo mismo que:
useEffect(()=>{})
Se volverá a representar cada vez porque cuando Object.is () compara un objeto, compara su referencia, no el valor en sí. Es lo mismo que por qué {} === {} devuelve falso porque sus referencias son diferentes. Si aún desea comparar el objeto en sí, no la referencia, puede hacer algo como esto:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])