mobx6使用案例

PS:mobx6版本以后官方不建议使用@observable装饰器了 可看官方案例 https://mobx.js.org/the-gist-of-mobx.html

脚手架 create-react-app

目录

         一、安装

二、配置package.json

三、定义mobx的store

四、在页面中使用mobx,并且通过action 改变mobx


一、安装

//npm yarn 随需求,尽量不要混用,混用有些资源可能会出现掉包
yarn add mobx
yarn add mobx-react


// 版本号
"mobx": "^6.3.2",
"mobx-react": "^7.2.0",

二、配置package.json

1.把隐藏的webpack暴露出来,释放之前记得请先提交代码 git commit 一次

yarn run eject

2.安装@babel/plugin-proposal-decorators 插件 必须的

yarn add @babel/plugin-proposal-decorators

 3.修改添加 package.json配置 (手动)

"babel": {
    "plugins": [
        ["@babel/plugin-proposal-decorators", {"legacy": true}]
    ],
    "presets": [
        "react-app"
    ]
}

三、定义mobx的store

1.目录结构(mobx支持多个多个状态模块)

stores
----- auth.js 模块1

----- test.js 模块2
----- index.js 总入口

2.模块 auth.js

import { observable, action, computed, makeObservable} from "mobx";


export class AuthStore {
     name = 'kangkang000';
     sex =  '男';
     userObj = {
        name: 'kangkang000',
        age: 23,
        token: '12345689'
    }

    constructor() {
        // mobx6 和以前版本这是最大的区别 
        makeObservable(this, {
            name: observable,
            sex: observable,
            userObj: observable,
            setName: action,
            titleName: computed
        });
        
    }

    setName(v) {
        console.log('触发action');
        this.name = v;
    }
    setUserObj(obj) {
        this.userObj = obj;
    }

   get titleName(){
        return this.name+'___111';
    }
    get userObject() {
        return this.userObj;
    }
    
}

3.定义导出出口index.js

import { AuthStore } from "./auth";
import { TestStore } from "./test";

export const store = {
    authStore: new AuthStore(),
    testStore: new TestStore()
};

4.在react 工程入口 导入 

import { store } from  './store/index';
import { Provider} from 'mobx-react';

ReactDOM.render(
  <React.StrictMode>
    <Provider store = {store}>
      <App  />
    </Provider>
  </React.StrictMode>,
  document.getElementById('root')
);

四、在页面中使用mobx,并且通过action 改变mobx

import React, { Component, PureComponent } from "react";
import { observer, inject } from 'mobx-react';

@inject( 'store')
@observer
class Index extends PureComponent {
    
    constructor(props) {
        super(props);
        console.log(this.props);
        this.state = {  };
    }
    render() {
        const { authStore, testStore } = this.props.store;
        return (
            <div>
                {authStore.name}/
                
                {testStore.name}/

                {authStore.titleName}
                <br />
                <button onClick = { () => { 
                    authStore.setName(new Date().getTime()); 
                } }>点击按钮触发action</button>
            </div>
        );
    }
}

export default Index;

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 微信小程序中的Mobx是一个类似于vuex的状态管理工具,可以实现全局数据共享和组件之间的通信。通过使用mobx-miniprogram和mobx-miniprogram-bindings这两个库,我们可以在小程序中创建Store实例对象,并将共享数据或方法绑定到组件或页面中使用。 这样就可以在小程序开发中更方便地管理和共享数据了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [微信小程序中的vuex(MobX)](https://blog.csdn.net/ct5211314/article/details/120322080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【微信小程序】-- 全局数据共享 - MobX(四十三)](https://blog.csdn.net/csh1807266489/article/details/129512310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [微信小程序中的VUEX](https://blog.csdn.net/m0_55035610/article/details/122164765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值