mobx在react中引用的几种方式

先看效果,类似于vue的双向绑定

在这里插入图片描述

方式一(inject方式):
import {Provider} from 'mobx-react'
import mobxStore from './store/testStore'
import ByInject from './components/byInject'
function App() {
  return (
    <div className="App">
      <Provider receiverStore={mobxStore}>
        <ByInject ></ByInject>
      </Provider>
    </div>
  );
}
export default App;
  • byInject.js
import React from 'react'
import { inject, observer} from 'mobx-react'
import {PropTypes} from 'prop-types'
@inject ('receiverStore') @observer class ByInject extends React.Component {
    render() {
        let {receiverStore} = this.props
        return (
            <div>
                <input onChange={(e) => { receiverStore.setName(e.target.value) }} placeholder="请设置名称"/>
                <div>{receiverStore.name}</div>
            </div>
        )
    }
}
ByInject.propTypes = {
    receiverStore: PropTypes.func
}
export default ByInject
方式二(inject方式):
import {Provider} from 'mobx-react'
import mobxStore from './store/testStore'
import ExportInject from './components/exportInject'
function App() {
  return (
    <div className="App">
      <Provider receiverStore={mobxStore}>
        <ExportInject ></ExportInject >
      </Provider>
    </div>
  );
}
export default App;
  • exportInject.js
import React from 'react'
import { inject, observer} from 'mobx-react'
import {PropTypes} from 'prop-types'
class ExportInject extends React.Component {
    render() {
        let {receiverStore} = this.props
        return (
            <div>
                <input onChange={(e) => { receiverStore.setName(e.target.value) }} placeholder="请设置名称"/>
                <div>{receiverStore.name}</div>
            </div>
        )
    }
}
ExportInject.propTypes = {
    receiverStore: PropTypes.func
}
export default inject('receiverStore')(observer(ExportInject))
方式三(import方式):
import ByImport from './components/byImport'
function App() {
  return (
    <div className="App">
        <ByImport ></ByImport >
    </div>
  );
}
export default App;
  • byImport.js
import React from 'react'
import { inject, observer} from 'mobx-react'
import {PropTypes} from 'prop-types'
import mobxStore from '../store/testStore'
@observer class ByImport extends React.Component {
    render() {
        return (
            <div>
                <input onChange={(e) => { mobxStore.setName(e.target.value) }} placeholder="请设置名称"/>
                <div>{mobxStore.name}</div>
            </div>
        )
    }
}
ByImport.propTypes = {
    mobxStore: PropTypes.func
}
export default ByImport
方式四(与函数组件相结合一):
import FunComponent from './components/funComponent'
function App() {
  return (
    <div className="App">
      <FunComponent></FunComponent>
    </div>
  );
}
export default App;
import {observer} from 'mobx-react'
import testStore from '../store/testStore'
function FunComponent() {
    return (
        <div>
            <input onChange={(e) => { testStore.setName(e.target.value) }} placeholder="请设置名称"/>
            <div>{testStore.name}</div>
        </div>
    )
}
export default observer(FunComponent)
方式五(与函数组件相结合二):
import FunComponent from './components/funComponent'
import {Provider} from 'mobx-react'
import testStore from './store/testStore'
function App() {
  return (
    <div className="App">
      <Provider testStore={testStore}>
        <FunComponent></FunComponent>
      </Provider>
    </div>
  );
}
export default App;
import {observer, inject} from 'mobx-react'
function FunComponent({testStore}) {
    return (
        <div>
            <input onChange={(e) => { testStore.setName(e.target.value) }} placeholder="请设置名称"/>
            <div>{testStore.name}</div>
        </div>
    )
}
export default inject('testStore')(observer(FunComponent))

其实有这么多方法,说到底也就是inject引入和observer监听这两个了,只有用了observer监听器,才能当mobx改变时页面也能及时监听到并更新页面

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值