react js, как сохранить измененный стейт
Всем привет. Друзья, вопрос про хуков... когда меняем начальный стейт , но в том же компоненте после работы другого хука, первый хук возвращает начальный стейт.... как лучше избегать этого? с помощью useEffect или вывести первый хук в контейнерный компнент, то есть на верхний уровень, где второй хук не обновит его? прошу еще теоретическое обьяснение этой ситуации? Вот данный ког работат нормально, но когда я нажимаю кнопку выполнив другой хук, у меня начальный стейт этого кода обновляеться...как быть?
const [count, setCount] = useState(1000); const [points, sumPoints] = useState(0);
useEffect(() => {
const interval = setInterval(() => setCount(count => count - 100), 1000);
answers.map(answer => {
if(answer.clicked){
clearInterval(interval);
if (answer.status){
setTimeout(() => {
sumPoints(points => points + count)
}, 2000)
}
}
return answer;
});
return () => clearInterval(interval)
}, [answers, count, sumPoints]);
Ответы (1 шт):
На мой взгляд следует отталкиваться от стейта;
Есть стейт который при изменении вызывает хуки;
Всё что нужно, так это расписать правильный порядок изменения значений в стейте (на конкретном примере) и затем запрограммировать реакцию на эти изменения.
P.S. Хуки вызываются в той последовательности (один за другим) в которой они описаны;
Чтобы вызвать инициализацию стейта из хука, надо указать пустой массив в зависимостях (это означает что хук сработает всего один раз на componrntDidMount)
useEffect(() => {
// Инициализируем стейт, и в этот хук больше никогда не возвращаемся
}, []);