我试图在NextJS静态站点上使用localStorage,但遇到localStorage is not defined错误。
我的错误显示的组件代码是:
export default function Category() {
const [cart, setCart] = useState(
localStorage.getItem("myCart") || ""
);
useEffect(() => {
localStorage.setItem("myCart", cart);
}, [cart]);
function addItem() {
setCart("item")
}
return (
<>
<button onClick={addItem}>Add</button>)
</>
);
}
有没有办法在NextJS静态站点上使用localStorage,或者我做错了什么?
谢谢你,谢谢
4条答案
按热度按时间8fsztsew1#
使用use-persisted-state:
plupiseo2#
localStorage
可以通过window
对象获得。由于Next.js运行了两次代码,一次是在SSR期间在服务器中,一次是在客户端中,因此在SSR期间它将无法访问window
对象,因此出现错误。您需要检查
window
对象是否存在,然后像这样访问localStorage
-检查
window
对象是否存在于环境中,如果存在,则从localStorage
获取值,否则返回空字符串。3gtaxfhh3#
这就是如何使用一种称为惰性初始化的技术来实现它。在组件之上创建函数。
5n0oy7gb4#