mobx使用

一、安装mobx

npm i mobx
npm i mobx-react-lite

二、简单使用

// src/store/counter.js
// 编写第一个mobx store小案例
import {makeAutoObservable} from "mobx";
class CounterStore {
   // 1.定义数据
   count = 0
   constructor() {
      //2.把数据弄成响应式
      makeAutoObservable(this)
   }
//   3.定义action函数(次该数据)
   addCount = () =>{
      // console.log(this)
      this.count++
   }
}
// 4.实例化,导出给react使用
const countStore = new CounterStore()
export default countStore


// App.js
// 1.导入 countStore
import countStore from "./store/counter";
// 2.导入中间件 连接mobx react 完成响应式变化
import {observer} from "mobx-react-lite";

function App() {
   console.log(countStore)
   return (
      <div className="App">
         {/* 渲染store中的count */}
         <p>
            {countStore.count}
         </p>

         {/* 点击触发addCount事件 */}
         <button onClick={countStore.addCount}>增加</button>
      </div>
   );
}

export default observer(App);

三、mobx-computed

//src/store/counter.js
// 定义一个原始数据
   list = [1, 2, 3, 4, 5, 6]
// 定义计算属性
   get filterList() {
      return this.list.filter(item => item > 2)
   }


//App.js 
{/*使用计算属性*/}
<p>{countStore.filterList.join('-')}</p>

四、mobx-模块化

将store中的模块整合到 index.js 文件中,通过 index.js 可以调用其它两个模块的方法

  • // src/store/index.js
    // 组合子模块
    // 封装统一导出供业务使用的方法
    import React from 'react'
    import ListStore from "./list.Store";
    import CounterStore from "./counter.Store";
    
    
    // 1.声明一个rootStore
    class RootStore {
       constructor() {
          // 对子模块进行实例化操作
          this.counterStore = new CounterStore()
          this.listStore = new ListStore()
       }
    }
    
    // 实例化操作
    const rootStore = new RootStore()
    // 使用creatContext机制 完成统一方法封装
    // 核心目的:让每个业务组件可以通过统一一样的方法获取store中的数据
    // Provider value={传递的数据}
    // 查找机制:useContext 优先从Provider value找
    // 如果找不到,就会从createContext方法传递过来的默认参数
    const context = React.createContext(rootStore)
    // 通过useContext拿到rootStore实例对象 然后返回
    const useStore = () => React.useContext(context)
    
    export default useStore
    
  • // src/store/counter.Store.js
    // 编写第一个mobx store小案例
    import {makeAutoObservable} from "mobx";
    
    class CounterStore {
       // 1.定义数据
       count = 0
       // 定义一个原始数据
       list = [1, 2, 3, 4, 5, 6]
    
    
       constructor() {
          //2.把数据弄成响应式
          makeAutoObservable(this)
       }
    
       // 定义计算属性
       get filterList() {
          return this.list.filter(item => item > 2)
       }
    
       // 方法修改list
       addList = () => {
          this.list.push(7, 8, 9)
       }
    
       // 3.定义action函数(次该数据)
       addCount = () => {
          // console.log(this)
          this.count++
       }
    
    }
    
    // 4.实例化,导出给react使用
    export default CounterStore
    
  • // src/store/list.Store.js
    import {makeAutoObservable} from "mobx";
    
    class ListStore{
       list = ['react','vue']
    
       constructor() {
          makeAutoObservable(this)
       }
    
       addList = () =>{
          this.list.push('Angular')
       }
    }
    
    export default ListStore
    

五、mobox的基础使用总结

1.初始化的mobox的过程是怎样的?
	声明数据 --> 响应式处理 --> 定义action函数 --> 实例化导出
	
2.mobox如何配合react,需要依赖什么包?
	mobox-react-lite作为链接包,导出observer方法,包裹组件(只能哈函数组件配合)
	
3.模块化解决了神魔问题?
	维护性问题
	
4.如何实现mobox的模块化?
	按照功能拆扥store模块,根模块中组合子模块,利用context机制依赖注入

六、mobox实战案例

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬日柠檬茶.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值