我是新来Mobx和reactjs在一般情况下,我有Redux的知识和反应原生,并在Redux时,当我用来调用一个动作和道具得到更新,componentDidUpdate
生命周期方法被触发。React Mobx componentDidUpdate没有更新时,可观察到的变化
我现在拥有的场景是登录。因此用户填写表单,单击提交,并提交调用Mobx操作(异步),并且当服务器响应时,更新observable,然后导航到主页面(导航发生在组件中)。
这是我的商店代码。
import { autorun, observable, action, runInAction, computed, useStrict } from 'mobx';
useStrict(true);
class LoginStore {
@observable authenticated = false;
@observable token = '';
@computed get isAuthenticated() { return this.authenticated; }
@action login = async (credentials) => {
const res = await window.swaggerClient.Auth.login(credentials)l
// checking response for erros
runInAction(() => {
this.token = res.obj.token;
this.authenticated = true;
});
}
}
const store = new LoginStore();
export default store;
export { LoginStore };
并且此处理程序位于我的组件中。
handleSubmit = (e) => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
this.props.store.login(values);
}
});
}
componentDidUpdate() {
if (this.props.store.isAuthenticated) {
const cookies = new Cookies();
cookies.set('_cookie_name', this.props.store.token);
this.props.history.push('main');
}
}
这不是理想的代码,我只是在试验,但我还没有完全理解它。
另外,如果我在render
生命周期方法使用的计算值(isAuthenticated)
,该componentDidUpdate
被触发,但如果我没有在render
方法使用它,则不会触发componentDidUpdate
。 例如,如果我这样做
render() {
if (this.props.store.isAuthenticated) return null
// .... rest of the code here
}
以上将触发componentDidUpdate。
我错过了什么吗? Mobx有更好的方法吗? 谢谢
观察者React Component将在上次渲染中取消引用的观察值发生更改时重新呈现。也许把这个逻辑与视图分开会更好? – Tholle
@Tholle是绝对逻辑应该从视图分开,我只是试验mobx,我想知道这个案件具体。 感谢您的建议:) –