微信小步伐——全局数据共享

源代码 2024-9-21 14:43:10 43 0 来自 中国
全局数据共享,也叫做状态管理,是为相识决组件/页面之间的数据共享标题
开辟中常用的数据共享方案有 Vuex、redux、MobX 等

小步伐中的数据共享方案

利用 mobs-miniprogram 配合 mobs-miniprogram-bindings 实现数据共享

  • mobs-miniprogram 用来Store创建实例对象
  • mobs-miniprogram-bindings 用来把Store中的共享数据大概方法,绑定到组件或页面中利用
安装 MobX


  • 在项目对应的目次下,利用终端运行以下命令来安装 MobX 对应的包
    npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1
  • 安装完成之后,在小步伐开辟工具的 工具 - 构建 npm
    构建之前先删除项目中 miniprogram_npm 文件夹,再选择构建 npm,否则会有构建失败的环境,固然,新项目没有天生 miniprogram_npm 文件夹的请忽略。
创建 Store 实例


  • 创建 Store 实例对象
    在项目根目次下创建 store 文件夹,并在文件夹下创建 store.js 文件,在store.js 文件中创建 Store 实例对象
  • 界说属性
    在store.js 文件中创建 Store 实例对象的详细代码如下
import { observable } from 'mobx-miniprogram'export const store = observable({  // 数据字段  num: 1,  numF: 2,  // 盘算属性  get sum(){    return this.num + this.numF  }})

  • 数据字段
    以上代码中,num、numF 等属于数据字段,可以直接在其他页面中利用
  • 盘算属性
    以上代码中,sum 是以方法的情势界说的盘算属性,get 体现当前盘算属性的值是只读类型

  • 界说方法
    界说了一个方法名为 updateNum 的方法来修改 num 的值,参数是由 action 包裹的方法,终极通过 function (step)方法修改内部数据,详细代码如下
import { observable, action } from 'mobx-miniprogram'export const store = observable({  // 数据字段  num: 1,  // 界说方法 可以修改 store 中的数据  updateNum: action(function (step) {    this.num += step  })})页面调用共享数据

利用共享数据在页面临应的 .js 文件中导入需要的内容,然后在 .wxml 文件中直接利用对应的数据

  • 导入步调


  • 导入需要的成员,这里导入了一个方法 createStoreBindings 和一个实例对象 store
  • 在 onLoad 方法中实现绑定,通过设置对象将 store 中的字段、方法等和页面的实例 this 举行绑定,把返回值赋给 this.storeBindings,方便在反面利用
  • 在 onUnload 方法中烧毁
import { createStoreBindings } from 'mobx-miniprogram-bindings'import { store } from '../../store/store'Page({  /**   * 生命周期函数--监听页面加载   */  onLoad(options) {    this.storeBindings = createStoreBindings(this, {      store,      fields: ['num', 'numF', 'sum'],      actions: ['updateNum']    })  },  clickBtn(e) {    // console.log(e);    this.updateNum(e.target.dataset.step)  },  /**   * 生命周期函数--监听页面卸载   */  onUnload() {    this.storeBindings.destoryStoreBindings()  }})

  • 利用
    在 .wxml 文件中直接利用
<view> 盘算公式:{{num}} + {{numF}} = {{sum}} </view><van-button type="primary" bindtap="clickBtn" data-step="{{1}}"> +1 按钮</van-button><view></view><van-button type="danger" bindtap="clickBtn" data-step="{{-1}}"> -1 按钮</van-button>组件调用共享数据

组件中利用和页面调用根本原理雷同,在导入和绑定方式上稍有差别
import {  storeBindingsBehavior} from "mobx-miniprogram-bindings"import store from "../../store/store"Component({  behaviors: [ storeBindingsBehavior ],  storeBindings: {    store,    fields: [ 'num', 'numF' ],    actions: [ 'updateNum' ]  },  methods: {    // 更新数据 自增长1    autoIncrement() {      this.updateNum(1)    }  }}).wxml 文件中需要体现数据的位置直接利用即可
分模块状态管理

随着项目功能模块增多,一个 store 欠好管理,可根据功能模块分别多个 store ,比如用户信息、订单信息、地点信息等

  • userStore.js
  • orderStore.js
  • addressStore.js
页面或组件中需要利用哪些 store 模块的状态,导入指定的 store 模块,作为 store 字段转达给 createStoreBindings 或 storeBindingsBehavior
立即更新状态

为了提升性能,在 store 中的字段被更新后,不会立即同步到 this.data,如果需要立即更新

  • 在组件中可以调用 this.updateStoreBindings()
  • 在页面中可以调用 this.storeBindings.updateStoreBindings()
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:54, Processed in 0.111010 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表