Javascript 如何仅在浏览器环境中执行功能

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

拜托,我是SSR和Nextjs应用程序的新手。我使用useLocalStorage挂钩将用户数据保存到本地存储。一切正常,但在我的终端(node js)中,未定义“我获取消息”窗口。是否有一种方法可以在某种条件下包装此代码,以便此功能仅在浏览器环境中执行。我不知道我能不能用

如果(process.browser)//则执行此操作

有人能帮我解决这个问题吗

这是我的本地存储挂钩,只能在浏览器中运行,不能在节点服务器上运行:

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)
应该满足你的需求。你还有其他问题吗?