react 中 mobx的用法

  1. 新建一个mobx.jsx文件

    import { useContext } from "react"
    import MyContext from '../../utils/Context'
    //引入Observer监听组件  实现数据和视图层的双向改变
    import { Observer } from 'mobx-react'
    
    const Mobx = () => {
        //hook有规则  useContext只能在组件里面用
        const store = useContext(MyContext);
    
        return (
            <Observer>
                {() => {
                    return (
                        <div>
                            <p>我是Mobx的应用</p>
                            <ul>
                                <li>mobx组件</li>
                                <li>使用mobx 的数据 msg === {store.msg}</li>
                                <li>使用mobx 的数据 number === {store.number}</li>
                                <li>使用mobx 的数据 str === {store.str}</li>
                                <li>mobx的计算属性 1 : {store.double}</li>
                                <li>mobx的计算属性 2 : {store.tatal}</li>
                                <button onClick={() => { store.changeNum() }}>改变munber</button>
                                <button onClick={()=> {store.changeStr('柳林')}}>改变str</button>
      
                            </ul>
                        </div>
                    )
                }}
            </Observer>
    
        )
    }
    
    export default Mobx
    
  2. 新建一个store文件夹 ---- 下面一个index.js文件

    //仓库文件  放所有的状态. 数据 
    import { makeAutoObservable, runInAction, autorun, reaction } from "mobx"
    
    function createDoubler(value) {
    
        return makeAutoObservable({
    
            //这是放状态的
            msg: '我是公共数据',
            number: 20,
            str: '程小小',
            value,
    
            //关键字 get 就代表这是一个计算属性 函数内部必须要返回一个值
            get double() {
                return this.number * 2
            },
    
            //get 计算属性可以有多个
            get tatal() {
                return this.str + this.number
            },
    
            //actions  所有的方法 方法内部   内部可以放异步操作
            changeNum() {
                console.log('changeNum 函数执行了');
    
                //异步操作会报警号 ,但是不会报错  解决方法:用runInaction包起来
    
                setTimeout(() => {
                    //如果action里面用了异步 ,最好将你异步里面改变state的那步操作 用runInaction包起来 ,可以优化一下
                    runInAction(() => {
                        this.number++
                    })
    
                }, 2000)
            },
    
            changeStr(v) {
                this.str = v;
    
            }
    
        })
    }
    
    let store = createDoubler()
    
    //autorun 类似于监听  和可以写在组件里面
    autorun(() => {
        let a = store.number;
        console.log('autorun 执行了');
    })
    
    //Reaction 指定你要监听的东西  和监听的作用一样
    reaction(() => store.number, () => {
        console.log('reaction 函数执行了');
    })
    
    
    //导出一个对象
    export default store
    
  3. 新建一个context.jsx文件

    //把 创建context提出去
    import { createContext } from 'react'
    
    const MyContext = createContext()
    
    export default MyContext
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React-MobxReact应用程序和Mobx状态管理库的结合。它帮助开发人员在应用程序轻松管理和更新状态,同时提高应用程序的性能。 下面是使用React-Mobx的基本步骤: 1. 安装React-Mobx:使用npm安装React-Mobx库。 ``` npm install mobx mobx-react --save ``` 2. 创建一个store:一个store是包含应用程序状态的对象。它可以包含数据和方法,用于更新和管理状态。 ```javascript import { observable, action } from 'mobx'; class CounterStore { @observable count = 0; @action increment() { this.count++; } @action decrement() { this.count--; } } const counterStore = new CounterStore(); export default counterStore; ``` 3. 在React组件使用store:使用`Provider`组件将store传递给React组件,然后使用`inject`和`observer`高阶组件包装组件。 ```javascript import React from 'react'; import { Provider, inject, observer } from 'mobx-react'; import counterStore from './counterStore'; @inject('counterStore') @observer class Counter extends React.Component { render() { const { counterStore } = this.props; return ( <div> <h1>Count: {counterStore.count}</h1> <button onClick={counterStore.increment}>+</button> <button onClick={counterStore.decrement}>-</button> </div> ); } } const App = () => ( <Provider counterStore={counterStore}> <Counter /> </Provider> ); export default App; ``` 在这个例子,`inject`高阶组件将store作为props传递给`Counter`组件,`observer`高阶组件将组件转换为响应式组件,使组件能够响应store状态的更改。 4. 更新状态:使用store的方法更新状态。 ```javascript import counterStore from './counterStore'; counterStore.increment(); counterStore.decrement(); ``` 这些是使用React-Mobx的基本步骤。使用React-Mobx可以更轻松地管理和更新状态,同时提高应用程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值