, Это называется чаще. Или очистка пытается сохранить на сервере вместо LocalStorage. Возможно, вы не хотите, чтобы эффект запускался при каждом изменении.
у сохранить состояниеlocalStorage
когда компонент размонтирован. Это раньше работало вcomponentWillUnmount
.
Я пытался сделать то же самое сuseEffect
крюк, но, кажется, состояние не верное в функции возвратаuseEffect
.
Почему это? Как я могу сохранить состояние без использования класса?
Вот фиктивный пример. Когда вы нажимаете close, результат всегда равен 0.
import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";
function Example() {
const [tab, setTab] = useState(0);
return (
<div>
{tab === 0 && <Content onClose={() => setTab(1)} />}
{tab === 1 && <div>Why is count in console always 0 ?</div>}
</div>
);
}
function Content(props) {
const [count, setCount] = useState(0);
useEffect(() => {
// TODO: Load state from localStorage on mount
return () => {
console.log("count:", count);
};
}, []);
return (
<div>
<p>Day: {count}</p>
<button onClick={() => setCount(count - 1)}>-1</button>
<button onClick={() => setCount(count + 1)}>+1</button>
<button onClick={() => props.onClose()}>close</button>
</div>
);
}
ReactDOM.render(<Example />, document.querySelector("#app"));