【发布时间】:2015-10-14 20:59:55
【问题描述】:
我正在尝试将会话数据存储到 localStorage,但收到错误消息。 "ReferenceError: localStorage 未定义"
这里是代码。
import alt from '../alt';
import UserActions from '../actions/UserActions.js';
// To Do: Inplement LocalStorage Polyfill
class UserStore {
constructor() {
this.initialize();
this.bindListeners({
onLoginSucceeded: UserActions.LOGIN_SUCCEEDED
});
}
initialize() {
this.setState({
// There's an error here.
_loggedIn: localStorage.getItem('loggedIn'),
_authToken: localStorage.getItem('authToken'),
_userId: localStorage.getItem('userId'),
_profile: localStorage.getItem('profile')
});
}
onLoginSucceeded(data) {
this.setState({
_loggedIn: true,
_authToken: data.authToken,
_userId: data.userId,
_profile: data.profile,
_user: data.user
});
// There's no error here.
localStorage.setItem('authToken', data.authToken);
localStorage.setItem('loggedIn', data.loggedIn);
localStorage.setItem('userId', data.userId);
localStorage.setItem('profile', data.profile);
}
getCurrentUser() {
return this.state._user;
}
isLoggedIn() {
}
}
export default alt.createStore(UserStore, 'UserStore');
我是 es6 的新手,所以我可能会错过一些东西,但我找不到任何东西,比如我不能在类中调用全局对象。 如果您对此错误有任何想法,将会很有帮助。
[编辑] 这适用于 es6fiddle http://www.es6fiddle.net/ichmbt0e/
class UserStore {
constructor() {
this.initialize();
}
initialize() {
this.setState({
_loggedIn: localStorage.getItem('loggedIn'),
_authToken: localStorage.getItem('authToken'),
_userId: localStorage.getItem('userId'),
_profile: localStorage.getItem('profile')
});
}
isLoggedIn() {
}
}
【问题讨论】:
-
你试过
window.localstorage吗? -
是的,我试过了,还有一个错误提示“ReferenceError: window is not defined”
-
你能不能把它的缩小版变成es6fiddle?
-
嗨,它在 es6fiddle 中工作,当我从构造函数中删除“this.initialize()”时,它也工作了。
-
这是一个同构应用吗?我会检查 if (typeof window !== "undefined") 以确保您在浏览器中运行此代码。这肯定是服务器尝试在 JS 使其/在客户端上运行之前执行它
标签: javascript reactjs flux react-alt