React + Mobx:不触发渲染

时间:2019-03-22 10:53:54

标签: reactjs rendering mobx mobx-react

当我更新Mobx存储的属性时,该值会更新,但不会触发渲染。

我的商店

@observable leftAsideActive = 4;
@observable rightAsideActive = false;

@action setAsideState(side, active) {
    if(side == UI_LEFT){ this.leftAsideActive = active};
    if(side == UI_RIGHT){ this.rightAsideActive = active};
}

getLeftState(){
    return this.leftAsideActive;
}

我的观点基本上是这样

class IOManagerView extends React.Component {
constructor(props){
    super(props);
}

render() {
    const { inputFiles, leftIsActive, handleFileChosen, activeLeft } = this.props;

    return (
        {leftIsActive + " "}
    )
}

从我的控制器

class IOManagerController extends React.Component {
constructor(props){
    super(props);
    this.state = {
        displayed: true
    }

    this.handleFileChosen = this.handleFileChosen.bind(this);
    this.activeLeft = this.activeLeft.bind(this);
}

activeLeft(){
    this.props.UI.activeLeft();
}

render() {
    const { inputFiles, UI } = this.props;
    return (
        <IOManagerView 
            leftIsActive={UI.leftState()}

            activeLeft={this.activeLeft}
        />
    )
}
}

如果我在运行UI.leftState()之前和之后检查this.props.UI.activeLeft();的值,那么我可以看到该值已正确更新

奇怪的是,我还有另一个可以很好地适用于动作和渲染。我比较都设置了文件,他们是双胞胎

1 个答案:

答案 0 :(得分:3)

您必须确保使用可观察对象的组件使用@observer装饰器,以便在可观察的更改时重新呈现它们。

@observer
class IOManagerView extends React.Component {
  // ...
}

@observer
class IOManagerController extends React.Component {
  // ...
}