Reactjs 如何控制mobx observer?
在Reactjs 如何控制mobx observer?,reactjs,mobx,Reactjs,Mobx,在react mobx中使用观察者函数时出现问题 我的源代码如下所示 import React from 'react'; import { observer } from 'mobx-react'; @observer class Test extends React.Component{ render(){ const { student } = this.props; // it's @observable object return ( <div
react mobx
中使用观察者函数时出现问题我的源代码如下所示
import React from 'react';
import { observer } from 'mobx-react';
@observer
class Test extends React.Component{
render(){
const { student } = this.props; // it's @observable object
return (
<div>{student.name}</div>
)
}
}
从“React”导入React;
从'mobx react'导入{observer};
@观察者
类测试扩展了React.Component{
render(){
const{student}=this.props;//它是@observable对象
返回(
{student.name}
)
}
}
当student
对象更改时,此组件将重新加载。但我想控制何时重新渲染 简而言之,我想抓住这个组件重新渲染时的关键点。
(这意味着
student
组件已更改)它与shouldComponentUpdate类似。
所以我想我可以用shouldComponentUpdate来控制。但它不起作用 那么我怎样才能控制它呢?
我想要的最终结果是,当
student
组件在重新渲染时具有特定参数时,我不想重新渲染。MWeststrate,MobX上的一位开发人员在一篇帖子中这样说
无法自定义跟踪行为。整个想法是,您不应该自行实现shouldcomponentdiddupdate。observer只会对在最后一次渲染中实际使用的观察值做出反应(因此不会对返回falsy的if语句后面的观察值做出反应)。能够自定义这一点将允许您打破MobX的基本保证:视图总是与状态同步,这不是一个理想的情况
链接:
你为什么要控制重新渲染,难道你不能推迟更新学生,或者在
运行不活动的帮助下一次完成所有更新吗?要回答你的问题,实际上有一种方法可以做到这一点(非常粗糙),通过猴子修补shouldComponentUpdate
方法:
@observer
class Test extends React.Component {
constructor(props) {
super(props);
this.mobxShouldComponentUpdate = this.shouldComponentUpdate;
this.shouldComponentUpdate = this.customShouldComponentUpdate;
}
customShouldComponentUpdate = (props, ...args) => {
if (props.student === 'foo') {
return false;
}
return this.mobxShouldComponentUpdate(props, ...args);
}
render(){
const { student } = this.props; // it's @observable object
return (
<div>{student.name}</div>
)
}
}
@observer
类测试扩展了React.Component{
建造师(道具){
超级(道具);
this.mobxShouldComponentUpdate=this.shouldComponentUpdate;
this.shouldComponentUpdate=this.customShouldComponentUpdate;
}
customShouldComponentUpdate=(道具,…参数)=>{
如果(props.student=='foo'){
返回false;
}
返回此.mobxShouldComponentUpdate(props,…args);
}
render(){
const{student}=this.props;//它是@observable对象
返回(
{student.name}
)
}
}
这就是说,这通常表明您对数据的思考方式是错误的。理想情况下,组件应该只是应用程序当前状态的纯呈现函数
class Test extends React.Component {
render(){
if (student.name === 'foo') {
return <div>Custom info</div>
}
return (
<div>{student.name}</div>
)
}
}
类测试扩展了React.Component{
render(){
如果(student.name=='foo'){
返回自定义信息
}
返回(
{student.name}
)
}
}
我听到的没错。我会找到另一条路。非常感谢。