我正在使用MobX
进行状态管理,并且还将一些信息保存在localStorage
中。
这是我的mobxStore的样子:
const hydrate = create({
storage: localStorage, // or AsyncStorage in react-native; default: localStorage
jsonify: false // if you use AsyncStorage, here shoud be true; default: true
})
export class VendorStore {
@observable vendor = {};
@persist @observable.ref loginState = localStorage.getItem('loginState');
}
var vendorStore = new VendorStore()
hydrate('vendorStore', vendorStore).then(() => console.log('vendorStore has been hydrated'))
export default vendorStore
这个想法是控制页面在loginState
上的重定向
这是我的Dashboard.js
的样子:
if (vendorStore.loginState === false) { return <Redirect to='/signin' /> }
if (vendorStore.loginState === true) {
return (
<div className="Dashboard">
<h1>Dashboard</h1>
<Main />
</div>
)
它要么没有按预期的方式工作,当loginState
为false
时没有重定向,或者抛出如下所示的反应渲染错误:
react-dom.development.js:57 Uncaught Invariant Violation: Dashboard(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null;
我们将不胜感激
谢谢
答案 0 :(得分:0)
If else
在jsx上不起作用,请尝试以下
vendorStore.loginState ? return (
<div className="Dashboard">
<h1>Dashboard</h1>
<Main />
</div>
): return <Redirect to='/signin' />
答案 1 :(得分:0)
这里几乎没有潜在的问题。
首先,嵌套的ifs可能会导致您出现问题,请尝试更改为:
if (vendorStore.loginState) {
return (
<div className="Dashboard">
<h1>Dashboard</h1>
<Main />
</div>
)
} else {
return <Redirect to='/signin' />
}
第二,如果您希望React对loginState
中的更改做出响应,那么您需要使用可以提供loginState
作为React的支持的东西。由于香草反应只会响应状态/道具的变化。尝试集成https://github.com/mobxjs/mobx-react