以后只要使用这个标签即可
<ProviderComponent></ProviderComponent>那消费者如何用呢? 我们嵌套多层的组件
export default class App extends Component{ render(){ return ( <ProviderComponent> <Demo1/> </ProviderComponent> ) } } class Demo1 extends Component{ render(){ return( <Demo2/> ) } } class Demo2 extends Component{ render(){ return( <Consumer> {(val)=><p>{val.msg}</p>} </Consumer> ) } }同样的使用Consumer标签,在标签中即可直接获取到,就像下面这样
<Consumer> {(val)=><p>{val.msg}</p>} </Consumer>先创建两个简单的组件,并引入相应的包 App.js
import React,{Component} from 'react' import store from './store' import {Provider} from 'mobx-react' import Child from './Child' export default class App extends Component{ render(){ return ( <Provider store={store}> <div> <Child/> </div> </Provider> ) } }Child.js
import React from 'react' export default class Child extends React.Component{ render(){ return( <div> 我是Child组件 </div> ) } }observable用于解释注入的这个store的使用方法
如何使用呢? 只需要简单定义即可
export default class Child extends React.Component{ render(){ let {store} = this.props return( <div> 我是Child组件 <p>{store.n}</p> </div> ) } }最后页面上就可以取到store中的值了
mobx修改使用action来标注
@action add(){ return this.n++; }使用的时候
import React from 'react' import {inject,observer} from 'mobx-react' @inject('store') @observer export default class Child extends React.Component{ state = { num:1 } fn(){ let {store} = this.props this.setState({ num:store.add() }) } render(){ let {store} = this.props return( <div> 我是Child组件 {this.state.num} <button onClick={this.fn.bind(this)}>点击</button> </div> ) } }这里有个小问题,正常去使用store.num好像没有响应式的效果,就是数据更新了,视图没有跟着更新,因此就尝试用state来控制响应式的效果。
用的时候直接
{store.sum}就可以了