Javascript 如何仅在浏览器环境中执行功能
拜托,我是SSR和Nextjs应用程序的新手。我使用useLocalStorage挂钩将用户数据保存到本地存储。一切正常,但在我的终端(node js)中,未定义“我获取消息”窗口。是否有一种方法可以在某种条件下包装此代码,以便此功能仅在浏览器环境中执行。我不知道我能不能用 如果(process.browser)//则执行此操作 有人能帮我解决这个问题吗 这是我的本地存储挂钩,只能在浏览器中运行,不能在节点服务器上运行:Javascript 如何仅在浏览器环境中执行功能,javascript,node.js,server-side-rendering,next,Javascript,Node.js,Server Side Rendering,Next,拜托,我是SSR和Nextjs应用程序的新手。我使用useLocalStorage挂钩将用户数据保存到本地存储。一切正常,但在我的终端(node js)中,未定义“我获取消息”窗口。是否有一种方法可以在某种条件下包装此代码,以便此功能仅在浏览器环境中执行。我不知道我能不能用 如果(process.browser)//则执行此操作 有人能帮我解决这个问题吗 这是我的本地存储挂钩,只能在浏览器中运行,不能在节点服务器上运行: import { useState } from 'react'; ex
import { useState } from 'react';
export const useLocalStorage = (key, initialValue) => {
const [storedValue, setStoredValue] = useState(() => {
try {
const item = window.localStorage.getItem(key);
return item ? JSON.parse(item) : initialValue;
} catch (error) {
console.log(error);
return initialValue;
}
});
const setValue = value => {
try {
let data = [];
const voteId = {};
if (window.localStorage.getItem(key) === null || window.localStorage.getItem(key) === undefined) {
voteId.reviewId = value;
data.push(voteId);
} else {
data = JSON.parse(window.localStorage.getItem(key));
voteId.reviewId = value;
data.push(voteId);
}
const valueToStore = data instanceof Function ? data(storedValue) : data;
setStoredValue(valueToStore);
window.localStorage.setItem(key, JSON.stringify(valueToStore));
} catch (error) {
console.log(error);
}
};
return [storedValue, setValue];
};
我实际上是这样处理的: 如果(!process.browser)返回空值
我将其放在所有内容之前,因此如果满足此条件,它将返回null,如果不满足,我将执行我的函数。一个合适的解决方案是在从文件路径导入useLocalStorage以用作组件时,使用nextjs动态库。这告诉nextjs仅在客户端渲染
从“下一个/动态”导入动态;
const useLocalStorage=动态(
()=>导入()
.then((mod)=>mod.useLocalStorage),{ssr:false});
也许这对你有帮助不,我认为这不是同一个问题,但无论如何,谢谢hi@Pokreniseweb,if(process.browser)
应该满足你的需求。你还有其他问题吗?