【微信小程序】全局数据共享 - MobX

ops/2024/10/11 7:29:44/

1. 什么是全局数据共享

在这里插入图片描述

在这里插入图片描述

2. 小程序中的全局数据共享方案

在这里插入图片描述

3.Mobx的使用

1.npm init -y(根据实际情况选择)

小程序项目中,可以通过 npm 的方式引入 MobX 。
如果你还没有在小程序中使用过 npm ,那先在小程序目录中执行命令:

npm init -y

2. 安装 MobX 相关的包

在项目中运行如下的命令,安装 MobX 相关的包:

npm install --save mobx-miniprogram mobx-miniprogram-bindings

安装指定版本:
在这里插入图片描述

3.构建npm(一定要记得)

MobX 相关的包安装完毕之后,记得删除 miniprogram_npm 目录后重新构建 npm

4.创建 MobX 的 Store 实例

  1. 根目录下创建 Store/store.js 文件。
  2. mobx-miniprogram 包中导入 observableaction两个方法。
  • observable: 用于创建 store 的实例对象
  • action: 用于包裹修改 store 数据的函数

在这里插入图片描述

import { observable,action} from 'mobx-miniprogram'
// observable 的返回值就是 store 对象
export const store = observable({// 数据字段numA: 1,numB: 2,// 计算属性 get为修饰符get sum(){return this.numA + this.numB},//action方法,用来修改 store 中的数据updateNumA: action(function (step){this.numA += step}),updateNumB: action(function (step){this.numB += step})
})

5.将 Store 中的成员绑定到页面

小程序中,将 store 成员绑定到页面中使用,可分三个步骤:

    1. 在页面 js 文件导入需要的成员。–createStoreBindings
    1. 在 onLoad 开始生命周期进行绑定。
    1. 在 onUnload 生命周期取消监听。

在这里插入图片描述

// pages/message/message.js
import { createStoreBindings } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'
Page({addSumA(e){this.updateNumA(e.target.dataset.step)},/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {this.storeBindings = createStoreBindings(this,{store,fields: ['numA','numB','sum'],actions: ['updateNumA']  // 注意是actions  不是action})},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {this.storeBindings.destroyStoreBindings()},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

其中 createStoreBindings 中的this指向当前调用该函数的实例,也就是 message 页面实例
第二个参数是一个对象,
store 代表着数据源,将 store 的属性或者方法绑定到页面实例中。
fields 是绑定到页面实例中的数据字段。
actions 是绑定到页面实例中的方法。
this.storeBindings 是接收 createStoreBindings 的返回值,并挂载在页面上,当页面卸载时需要进行清空操作。

6.在页面上使用 Store 中的成员

在这里插入图片描述

<!--pages/message/message.wxml-->
<text>pages/message/message.wxml</text>
<view>{{numA}} + {{numB}} = {{sum}}</view>
<van-button bindtap="addSumA" data-step="{{1}}" type="primary">numA + 1</van-button>

7.将 Store 中的成员绑定到组件

Store 中的属性方法绑定到组件中,实现步骤可分为三个步骤:

  • 在组件 js 文件导入需要的成员。–storeBindingsBehavior
  • 在 Component 提供behaviors节点来存储前面导入的 Behaviors 数组。
  • 在 behaviors 节点平级的位置声明 storeBindings 对象接收 store、fields 和 actions 这三个属性。
  • 在这里插入图片描述
// components/my-number/my-number.js
import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'
Component({behaviors:[storeBindingsBehavior],storeBindings:{store,fields:{numA: ()=> store.numA,numB: (store) => store.numB,sum:'sum'},actions:{updateNumB:'updateNumB'}},/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*/methods: {addNumB(e){this.updateNumB(e.target.dataset.step)}}
})

8.在组件上使用 Store 中的成员

在这里插入图片描述

<!--components/my-number/my-number.wxml-->
<text>components/my-number/my-number.wxml</text>
<view>-----------------组件---------------</view>
<van-button type="primary" bindtap="addNumB" data-step="{{1}}">numB + 1</van-button>

http://www.ppmy.cn/ops/104752.html

相关文章

Your code has been rated at 6.24/10 (previous run: 5.83/10, +0.41)

收到代码评分为6.24/10&#xff0c;并且相比之前的评分5.83/10有所提升&#xff08;0.41&#xff09;&#xff0c;说明你的代码质量有所改善&#xff0c;但仍有一定的提升空间。为了进一步优化代码&#xff0c;特别是针对日志记录中使用懒惰格式化的问题&#xff0c;我们可以继…

Java面试自我介绍

持续更新中 模块序号目录链接前言介绍1前言地址2介绍地址基础知识3计算机网络地址4操作系统地址5Java基础地址6Java并发地址7Java虚拟机地址中间件8Mysql地址9Redis地址10Elasticsearch地址11RabbitMQ地址12RocketMQ地址框架13分布式系统地址14MyBatis地址15Dubbo地址16Spring地…

K8S ReplicaSet

在 Kubernetes&#xff08;通常拼写为 Kubernetes&#xff0c;而不是 kubernate&#xff09;中&#xff0c;ReplicaSet&#xff08;副本集&#xff09;是一种 Kubernetes 控制器&#xff0c;它确保由它管理的 Pod&#xff08;容器组&#xff09;的数量与预期的副本数量相匹配。…

Mac 去除自动生成.DS_Store文件的方法

最近在编译部署项目&#xff0c;Mac经常会产生.DS_Store的隐藏文件&#xff0c;虽然在Mac上看不到&#xff0c;但是有时用了人家的U盘或把U盘拿到Windows系统上用&#xff0c;就会看到&#xff0c;不但麻烦而且会泄露隐私&#xff0c;文件名都会历历在目。 .DS_Store是Mac OS保…

HaloE 移动云前端组件库的研究与分析

原文链接&#xff1a;HaloE 移动云前端组件库的研究与分析-科技语者 (chgskj.cn) 博主提示&#xff1a;该文章使用AI进行生成&#xff0c;并非博主创作&#xff01; 摘要&#xff1a;本论文旨在深入研究 HaloE 移动云前端组件库&#xff0c;探讨其设计价值观、功能特点、开发…

swift自定义数据集微调Qwen-7B大模型,转换模型后使用ollama跑起来

前文&#xff1a;swift微调Qwen-7B大模型-CSDN博客 我详细介绍了swift如何进行微调&#xff0c;但数据集均来自魔搭社区&#xff0c;如何想训练自定义数据集&#xff0c;实际上也很简单。 一、自定义数据集微调 export MKL_THREADING_LAYERGNU \ CUDA_VISIBLE_DEVICES0,1,2…

华为海思招聘-芯片与器件设计工程师-数字芯片方向- 机试题——(共九套)(每套四十题)

华为海思招聘-芯片与器件设计工程师-数字芯片方向- 机试题-题目分享——共九套&#xff08;每套四十题&#xff09; 岗位——芯片与器件设计工程师 岗位意向——数字芯片 真题题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&am…

小程序封装接口请求

1. 安装 wechat-http 包 npm install init -y npm install wechat-http2. 创建 `http.js` 文件 // utils/http.js import WechatHttp from wechat-http; import { handleBusinessError } from ./errorHandling; // 引入你自定义的业务错误处理函数// 初始化 WechatHttp 实例 …