【发布时间】:2021-06-10 02:40:51
【问题描述】:
我正在尝试实现一个事件监听器,它触发一个 useEffect 函数来呈现一个购物袋。目前购物袋仅在重新加载页面后出现。这应该立即发生。 我已经为我的问题构建了一个沙箱:https://codesandbox.io/s/vigilant-oskar-drsvy?file=/src/App.js。 单击“单击它”按钮时,除了重新加载页面时,什么都没有出现。
这里也是代码:
export default function App() {
const [storageData, setStorageData] = useState(localStorage.getItem("alert"));
useEffect(() => {
setStorageData(localStorage.getItem("alert"));
}, []);
//insert eventlistener to dependency array of useEffect
return (
<div className="App">
<button
onClick={() => {
localStorage.setItem("alert", "ShoppingBag");
}}
>
click it
</button>
<div>{storageData}</div>
</div>
);
}
【问题讨论】:
-
在本地存储中设置某些内容不会触发重新渲染。在您的 onClick 处理程序中,您需要调用状态更新程序函数 setStorageData('shoppingBag`) 。本地存储是为了保持你的应用程序的价值,即使你刷新。
-
也许你需要在按钮点击后更新
storageData。您必须在按钮单击回调中添加setStorageData(localStorage.getItem("alert"));。
标签: javascript reactjs addeventlistener event-listener use-effect