前言
相信大家在使用服务端渲染的框架的时候,都会遇到一个问题,就是因为sessionStorage和localStorage只存在于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存不存