reactjs - 简单的 MobX Observable 不渲染
问题描述
我有一个简单的 React 类,用 MobX@observer
注释和一个简单的数据结构(用 . 注释)进行了注释@observable data = { .. }
。一个动作会更新这个结构,但会渲染。
这是该类的源代码:-
import React, {Component, Fragment} from 'react';
import {observer} from "mobx-react";
import {observable} from "mobx";
import {withRouter} from 'react-router-dom';
@observer
@withRouter
class UpdateDetailsForm extends Component {
constructor(props) {
super(props);
this.onClick = this.onClick.bind(this);
}
@observable data = {
error: ""
};
onClick () {
this.data.error = "error has occurred";
console.log("Something has happened!"); // testing purposes
}
render() {
return (
<div>
<div className="red">[ {this.data.error} ]</div>
<input type="button" value="Click Me!" onClick={this.onClick} />
</div>
);
}
}
但是,当我单击按钮时,控制台会显示...
Something has happened!
...这证明了 的状态发生了data
变化,但 HTML 没有更新。
解决方案
刚刚想通了!这是类注释的顺序很重要,即
@withRouter
@observer
class UpdateDetailsForm extends Component {
...
这行得通!
但是@withRouter
最接近class UpdateDetailsForm
它的注释何时失败。
在 MobX 文档中也找到了这个 - https://mobx.js.org/best/pitfalls.html
_@inject('store')
before@observer
会导致 MobX 不触发_
@inject
所以注释也会发生同样的事情。
推荐阅读
- django - Django REST Framework:禁止直接分配到多对多集合的前端
- neo4j - Neo4j:计算属于两个不同连接类别的项目
- ubuntu - Ubuntu 18.04 与 Intellij 后退/前进导航冲突
- azure-service-fabric - 更新 VM 规模集(服务结构)的所有实例中的证书
- sql-order-by - 如何从查询中获取价值手动 ORDER BY?
- sql - Oracle 到 SQL Server ODBC 链接 - 使用 WHERE 子句时标识符无效
- sql - 如何从 postgresql 的列中删除字母数字行?
- python - Django:网址路由到错误的文件,但位置正确:TemplateDoesNotExist 错误
- angular - 使用角度 5 在表格中显示数据
- android - 程序类型已经存在:BuildConfig