De acordo com reactjs.org, componentWillMount não será suportado no futuro.
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
Não há necessidade de usar componentWillMount.
Se você quiser fazer algo antes da montagem do componente, faça-o no construtor ().
Se você deseja fazer solicitações de rede, não faça em componentWillMount. É porque isso levará a erros inesperados.
Solicitações de rede podem ser feitas em componentDidMount.
Espero que ajude.
atualizado em 03/03/2019
O motivo pelo qual você solicita componentWillMount é provavelmente porque deseja inicializar o estado antes da renderização.
Basta fazê-lo em useState.
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
ou talvez Você queira executar uma função no componentWillMount, por exemplo, se o seu código original estiver assim:
componentWillMount(){
console.log('componentWillMount')
}
com hook, tudo que você precisa fazer é remover o método do ciclo de vida:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
Eu só quero adicionar algo à primeira resposta sobre useEffect.
useEffect(()=>{})
useEffect é executado em cada renderização, é uma combinação de componentDidUpdate, componentDidMount e ComponentWillUnmount.
useEffect(()=>{},[])
Se adicionarmos uma matriz vazia em useEffect, ela será executada exatamente quando o componente estiver montado. É porque useEffect irá comparar a matriz que você passou para ela. Portanto, ele não precisa ser um array vazio. Pode ser um array que não está sendo alterado. Por exemplo, pode ser [1,2,3] ou ['1,2']. useEffect ainda é executado somente quando o componente é montado.
Depende de você se você deseja executar apenas uma vez ou após cada renderização. Não é perigoso se você esqueceu de adicionar uma matriz, desde que saiba o que está fazendo.
Eu criei uma amostra para gancho. Por favor, confira.
https://codesandbox.io/s/kw6xj153wr
atualizado em 21/08/2019
Está branco desde que escrevi a resposta acima. Acho que há algo que você precisa prestar atenção. Quando você usa
useEffect(()=>{},[])
Quando reagir compara os valores que você passou para a matriz [], ela usa Object.is () para comparar. Se você passar um objeto para ele, como
useEffect(()=>{},[{name:'Tom'}])
É exatamente o mesmo que:
useEffect(()=>{})
Ele será renderizado novamente sempre que, quando Object.is () compara um objeto, compara sua referência e não o valor em si. É o mesmo porque {} === {} retorna false porque suas referências são diferentes. Se você ainda deseja comparar o objeto em si, não a referência, pode fazer algo assim:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])