За інформацією reactjs.org, компонентWillMount надалі не підтримуватиметься.
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
Немає необхідності використовувати компонентWillMount.
Якщо ви хочете щось зробити перед монтуванням компонента, просто зробіть це в конструкторі ().
Якщо ви хочете робити мережеві запити, не робіть цього в компонентWillMount. Це тому, що це призведе до несподіваних помилок.
Мережеві запити можна виконувати в компонентDidMount.
Сподіваюся, це допомагає.
оновлено 03.03.2019
Причина, чому ви запитуєте компонентWillMount, ймовірно, полягає в тому, що ви хочете ініціалізувати стан перед рендерінгами.
Просто зробіть це в useState.
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
або, можливо, Ви хочете запустити функцію в компонентWillMount, наприклад, якщо ваш початковий код виглядає так:
componentWillMount(){
console.log('componentWillMount')
}
за допомогою гачка, все, що вам потрібно зробити, - це видалити спосіб життєвого циклу:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
Я просто хочу додати щось до першої відповіді про useEffect.
useEffect(()=>{})
useEffect працює на кожному візуалізації, це комбінація компонентівDidUpdate, компонентDidMount та ComponentWillUnmount.
useEffect(()=>{},[])
Якщо ми додамо порожній масив у useEffect, він запускається саме тоді, коли компонент встановлений. Це тому, що UseEffect порівняє масив, який ви передали йому. Таким чином, він не повинен бути порожнім масивом. Це може бути масив, який не змінюється. Наприклад, це може бути [1,2,3] або ['1,2']. useEffect все ще працює лише при встановленні компонента.
Від вас залежить, чи хочете ви, щоб він запускався лише один раз або працює після кожного візуалізації. Це не небезпечно, якщо ви забули додати масив, поки ви знаєте, що робите.
Я створив зразок для гачка. Будь ласка, перевірте це.
https://codesandbox.io/s/kw6xj153wr
оновлено 21.08.2019
Це було білим з моменту написання вищезгаданої відповіді. Я думаю, що на це потрібно звернути увагу. Коли ви використовуєте
useEffect(()=>{},[])
Коли react порівнює значення, які ви передали масиву [], він використовує Object.is () для порівняння. Якщо ви передаєте йому об’єкт, наприклад
useEffect(()=>{},[{name:'Tom'}])
Це точно те саме, що:
useEffect(()=>{})
Він буде повторно відображатися кожен раз, оскільки коли Object.is () порівнює об'єкт, він порівнює його посилання, а не саме значення. Це те саме, що чому {} === {} повертає помилкові, оскільки їх посилання різні. Якщо ви все ще хочете порівнювати сам об'єкт не з посиланням, ви можете зробити щось подібне:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])