Jak podaje reactjs.org, w przyszłości składnik componentWillMount nie będzie obsługiwany.
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
Nie ma potrzeby używania elementu componentWillMount.
Jeśli chcesz coś zrobić przed zamontowaniem komponentu, po prostu zrób to w konstruktorze ().
Jeśli chcesz wykonywać żądania sieciowe, nie rób tego w componentWillMount. Dzieje się tak, ponieważ spowoduje to nieoczekiwane błędy.
Żądania sieciowe można wykonać w module componentDidMount.
Mam nadzieję, że to pomoże.
zaktualizowano 08.03.2019 r
Powodem, dla którego pytasz o componentWillMount, jest prawdopodobnie to, że chcesz zainicjować stan przed renderowaniem.
Po prostu zrób to w useState.
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
a może chcesz uruchomić funkcję w componentWillMount, na przykład, jeśli twój oryginalny kod wygląda tak:
componentWillMount(){
console.log('componentWillMount')
}
z hakiem wszystko, co musisz zrobić, to usunąć metodę cyklu życia:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
Chcę tylko dodać coś do pierwszej odpowiedzi na temat useEffect.
useEffect(()=>{})
useEffect działa na każdym renderowaniu, jest połączeniem składników componentDidUpdate, componentDidMount i ComponentWillUnmount.
useEffect(()=>{},[])
Jeśli dodamy pustą tablicę w useEffect, będzie ona działać tylko wtedy, gdy komponent zostanie zamontowany. Dzieje się tak, ponieważ useEffect porówna przekazaną do niego tablicę. Więc nie musi to być pusta tablica, może to być tablica, która się nie zmienia. Na przykład może to być [1,2,3] lub ['1,2']. useEffect nadal działa tylko po zamontowaniu komponentu.
To zależy od Ciebie, czy chcesz, aby był uruchamiany tylko raz, czy po każdym renderowaniu. Nie jest niebezpieczne, jeśli zapomnisz dodać tablicę, o ile wiesz, co robisz.
Stworzyłem próbkę do haka. Proszę sprawdź to.
https://codesandbox.io/s/kw6xj153wr
aktualizacja 21.08.2019 r
Odkąd napisałem powyższą odpowiedź była biała. Myślę, że jest coś, na co musisz zwrócić uwagę. Kiedy używasz
useEffect(()=>{},[])
Kiedy reakcja porównuje wartości przekazane do tablicy [], używa Object.is () do porównania. Jeśli przekażesz mu obiekt, taki jak
useEffect(()=>{},[{name:'Tom'}])
To jest dokładnie to samo, co:
useEffect(()=>{})
Wyrenderuje się ponownie za każdym razem, ponieważ gdy Object.is () porównuje obiekt, porównuje jego odwołanie, a nie samą wartość. To jest to samo, dlaczego {} === {} zwraca fałsz, ponieważ ich odwołania są różne. Jeśli nadal chcesz porównać sam obiekt, a nie odniesienie, możesz zrobić coś takiego:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])