如何使 mobx 观察者上下文发生变化

How to make mobx observer context change

当使用 context 和 mobx 时。组件无法更改观察者上下文。

示例(只是一个简单的演示):

const Context = createContext({})

class Parent extends Component {
  render() {
    return (
      <Context.Provider value={this.state.value}> // when value changed
        <Child/>
      </Context.Provider>
    )
  }
}

@observer
class Child extends Component {   
  // ... some other observable properties
  render() {
    return (
      <div>
        {this.context} // here not changed
      </div>
    )
  }
}

ReactDOM.render(<Parent/>, document.getElementById('app'))

当上下文提供程序值更改时,Child@observer 无法更新。如何解决这个问题。

Mobx @observer 不会观察 React 上下文的变化。 如果您希望您的组件随上下文变化而变化,请使用默认值

<Context.Consumer>
  /* your component code here */
</Context.Consumer>

组件。

您可以在组件中混合使用 @observer<Context.Consumer>

@observer
class Child extends Component {   
  // ... some other observable properties
  render() {
    return (
      <Context.Consumer>
        {value  /* value from context */=> <div>{value}</div>}
      </Context.Consumer>
    )
  }
}

参考资料