, Это называется чаще. Или очистка пытается сохранить на сервере вместо 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"));

CodeSandbox

Ответы на вопрос(1)

Ваш ответ на вопрос