Як виправити проблему хука React useState, яка не встановлює початкове значення?
Хук useState
дозволяє нам створювати зміни стану в наших компонентах React
. Він приймає аргумент для початкового значення стану. Іноді нам може знадобитися встановити початкове значення стану з props
. І ми хочемо оновити початкове значення, коли змінюється значення props
.
У цій статті ми розглянемо, як виправити React хук useState
з встановленням початкового стану з props
.
Оновлення стану під час оновлення властивості
Щоб оновити стан, коли props
оновлюється, ми маємо спостерігати за значенням props
за допомогою useEffect
хука. Потім у useEffect
зворотному виклику ми можемо викликати функцію встановлення стану, щоб оновити значення стану значенням властивості. Наприклад, ми можемо написати:
import React, { useEffect, useState } з "react"; const Count = ({ count }) => { const [num, setNum] = useState(count); useEffect(() => { setNum(count); }, [count]); return <p>{num}</p>; }; export default function App() { const [count, setCount] = useState(0); return ( <div className="App"> <button onClick={() => setCount((c) => c + 1)}>increment</button> <Count count={count} /> </div> ); }
У Count
компоненті ми маємо useState
хук зі count
значенням як аргумент. Це встановлюється початкове значення count
яке дорівнює num
. Потім у нас є useEffect
хук, який стежить за count
значенням, передаючи його в масив у другому аргументі. Потім у зворотному виклику ми викликаємо, setNum
щоб оновити num
значення та відобразити його в операторі return
під ним.
У App
ми маємо стан count
, створений хуком useState
. Потім ми викликаємо setCount
в обробнику onClick
кнопки, яка оновлює значення count
стану. І ми передаємо count
значення як значення count
props
у Count
компоненті.
Тепер, коли ми натискаємо кнопку збільшення, ми бачимо оновлення значення num
та його останнє значення.
Висновок
Ми можемо переконатися, що стан компонента React
оновлюється, коли змінюється значення props
, спостерігаючи за значенням props
за допомогою useEffect
хука, а потім викликаємо функцію встановлення стану у зворотному виклику useEffect
зі значенням props
як аргументом.
Переклад статті “How to Fix the React useState Hook Not Setting Initial Value Problem?“