NextJs使用session的两种方法

1,447 阅读1分钟

前言

相信大家在使用服务端渲染的框架的时候,都会遇到一个问题,就是因为sessionStoragelocalStorage只存在于window中,也就是说这两个只存在于客户端,而在服务端是不存在window对象的,那我们在使用NextJs或者NuxtJs难免会有需要使用到session的地方,那我们该怎么来存呢

重点

其实方法也比较简单,就是判断当前环境的window对象存不存在,如果当前环境存在window就存或者读取,不存在则不处理

1.方法一

    //存
    if (typeof window !== "undefined") {
      window.sessionStorage.setItem("item", value);
    }
    //读取
    if (typeof window !== "undefined") {
      let value = window.sessionStorage.getItem("item");
    }

tips:但是很奇怪的就是,YaSol目前的项目中这样使用,总是会报window找不错的错,明明是已经判断了,还是会报错,但是我去使用sendcodebox写的时候又不会的,这个有点不明白,可能是本地环境问题,也可能是版本问题,且之前用方法一也是可以正常使用的,暂时不知道为啥,反正目前使用方法二不会报错

方法二

export const getSession = (key: string) => {
    if (!key) {
        return
    }
    const isBrowser: boolean = ((): boolean => typeof window !== 'undefined')();
    return isBrowser ? window['sessionStorage'][key] : '';
};
export const setSession = (key: string, value: any) => {
    if (!key || !value) {
        return
    }
    const isBrowser: boolean = ((): boolean => typeof window !== 'undefined')();
    if (isBrowser) {
        window['sessionStorage'].setItem(key, JSON.stringify(value))
    }
};
export const removeSession = (key: string) => {
    const isBrowser: boolean = ((): boolean => typeof window !== 'undefined')();
    if (isBrowser) {
        window['sessionStorage'].removeItem(key)
    }
};


其实两个方法的做法大同小异,就是判断window存不存