useEffect localStorage循环

时间:2020-09-16 17:35:47

标签: reactjs react-hooks state persistence use-effect

我正在尝试存储一个状态,但是由于无限循环,我显然无法做到这一点。你能帮我吗?

enter image description here

import React, { useState, useEffect } from "react";

const App = () => {
  const [rows, setRows] = useState("Inicial State");

  function init() {
    const data = localStorage.getItem("my-list");
    if (data) {
      setRows(JSON.parse(data));
    }
    localStorage.setItem("my-list", JSON.stringify(rows));
  }

  useEffect(() => {
    init();
  });

  return (
    <div>
      <button onClick={() => setRows("Loaded state!")}>Load!</button>
      <div>{rows}</div>
    </div>
  );
};

export default App;

2 个答案:

答案 0 :(得分:1)

每次重新渲染组件时都调用init()。在https://reactjs.org/docs/hooks-effect.html此处记录如何使用useEffect。您只能通过以下方式在类组件中像componentDidMount那样调用一次:

  useEffect(() => {
    init();
  }, []);

  useEffect(() => {
      localStorage.setItem("my-list", JSON.stringify(rows));
  }, [rows]);

答案 1 :(得分:1)

如果您使用useEffect进行初始化,则它需要有一个空的依赖项数组以确保它仅在第一个渲染器上运行,而不是在每个渲染器上运行:

 useEffect(() => init(), []);
相关问题