reactjs - useEffect localStorage 循环
问题描述
我正在尝试存储单个状态,但由于无限循环,我显然无法做到这一点。你可以帮帮我吗?
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;
解决方案
每次组件重新渲染时都调用 init()。在此处记录如何使用useEffect
:https ://reactjs.org/docs/hooks-effect.html 。componentDidMount
您应该只像在类组件中那样调用一次:
useEffect(() => {
init();
}, []);
useEffect(() => {
localStorage.setItem("my-list", JSON.stringify(rows));
}, [rows]);
推荐阅读
- javascript - 'Cache-Control: No-cache' 是否支持此设置?
- java - simple-spring-memcached 升级到 4.1.1 导致 WrappedCacheException
- java - 如何在android中为透明png图像添加描边/边框?
- apache - 如何横向扩展 apache 地图集
- javascript - React & Browserify:我有延迟加载的选项吗?
- android - 如何在android中获取BottomNavigationView的SelectedItemId
- amazon-web-services - When I am trying to create a pipeline in amazon elastic transcoder using amazon console with IAM it gives me an error
- javascript - 在对象中找到键值
- java - How to dynamically change a list value to another list in Java or Groovy
- javascript - 如何使用 IE11、Chrome 71、Firefox 62(Quantum)等最新浏览器版本获取 iframe 的 innerHTML