小程序MobX创建store并实现全局数据共享

查看小程序根目录中是否存在package.json文件

在项目根目录运行cmd

没有package.json文件输入npm init -y初始化一下,初始化一个包管理

安装MobX

npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1

小程序菜单栏工具–构建npm

根目录创建store文件夹,在文件夹下新建store.js ,这个文件是专门用来创建store的实例对象

import {observable} from 'mobx-miniprogram'
export const store = observable({
  userid: 123,
  username: 'as',
  numA: 1,
  numB: 2,
  // 计算属性
  get sum() {
    return this.numA + this.numB
  },
  // action方法,用来修改store中数据
  UpdateNum1: action(function (step) {
    this.numA += step
  }),
  UpdateNum2: action(function (step) {
    this.numB += step
  })
})

在页面使用store数据

.js文件

import {createStoreBindings} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'
//在onload生命周期中挂载
  onLoad: function (options) {
    this.storeBindings = createStoreBindings(this, {
      store,
      // 数据以及计算属性放fields里
      fields: ['numA', 'numB', 'userid', 'username', 'sum'],
      actions: ['UpdateNum1', 'UpdateNum2']
    })
  },
  //在onUnload中清理
    onUnload: function () {
    // 数据清理
    this.storeBindings.destroyStoreBindings()
  },

此时可以在页面中用{{}}使用store中的数据

<view>userid:{{userid}}</view>
<view>username:{{username}}</view>

在这里插入图片描述

使用store中的action方法

页面绑定一个方法,并且使用data-*进行传参

<view>{{numA}}+{{numB}}={{sum}}</view>
<van-button bindtap="change" data-newA="{{1}}">numA+1</van-button>
<van-button bindtap="change" type='warning' data-newA="{{-1}}">numA-1</van-button>

在这里插入图片描述
在js中使用

  change(e) {
    console.log(e);
    const newA = e.target.dataset.newa
    this.UpdateNum1(newA)
  },

打印
在这里插入图片描述

点击之后就可以是页面数据+1或者-1
在这里插入图片描述
在这里插入图片描述

在组件中使用store中的数据

在根目录中新建components文件夹,在文件夹下新增number文件夹,
在number文件夹下右键点击新增component,然后命名,会自动生成四个同名文件

在这里插入图片描述

在组件的js文件中引入

// components/numbers/numbers.js
import { storeBindingsBehavior} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'

//在Component中挂载
Component({
  // 通过storeBindingsBehavior来实现自动绑定
  behaviors: [storeBindingsBehavior],
  storeBindings: {
    // 数据源
    store,
    //fields中写store中的数据以及计算属性
    fields: {
      // 前面是映射到组件中的名字,可以自定义,也可以填写一致
      //后面是store中的名字,字符串形式
      n1: 'numA',
      n2: 'numB',
      sumCount: 'sum'
    },
    //actions写store中的action方法
    actions: {
      UpdateNum2: 'UpdateNum2'
    }
  },
})

页面中{{}}来使用store中的数据

页面绑定一个方法,并且使用data-*进行传参

<!-- 组件中使用store数据 -->
<view>{{n1}}+{{n2}}={{sumCount}}</view>
<van-button bindtap="HandelNum" data-newB="{{1}}">numB+1</van-button>
<van-button bindtap="HandelNum" type='warning' data-newB="{{-1}}">numB-1</van-button>

在组件js文件中定义HandelNum方法

Component({
  /**
   * 组件的方法列表写在Component中的methods下
   */
  methods: {
    HandelNum(e) {
      console.log(e);
      this.UpdateNum2(e.target.dataset.newb)
    }
  }
})

在这里插入图片描述

在页面中使用该组件

  1. 在app.json中定义全局组件
"usingComponents": {
    "my-numbers": "/components/numbers/numbers"
    "van-button": "@vant/weapp/button/index"
  }
  1. 在页面中使用组件
<my-numbers></my-numbers>

在这里插入图片描述
3. 点击按钮可实现数据+1 -1
在这里插入图片描述
在这里插入图片描述

回答: 微信小程序中的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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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、付费专栏及课程。

余额充值