Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何控制mobx observer?_Reactjs_Mobx - Fatal编程技术网

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}
)
}
}

我听到的没错。我会找到另一条路。非常感谢。