uni-app入门:全局数据共享方案之mobx

news2024/11/27 19:41:45

     1.全局数据共享介绍
     2.准备工作
     3.使用说明
         3.1 page页面进行全局数据共享
         3.2 component组件进行全局数据共享

1.全局数据共享介绍

     全局数据共享也叫作状态管理,主要用于组件间数据共享问题的处理.实际开发中常用的实现方案:vuex、redux、mobx,本文主要介绍mobx.

2.准备工作

mobx需要引入两个npm包:
    mobx-miniprogram:用于创建store实例对象
    mobx-miniprogram-bindings:用于将store中数据或是方法绑定到组件或是页面中.
    安装命令(项目所在目录下执行):

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

在这里插入图片描述

    安装完成之后,如果项目中存在miniprogram-npm文件夹则删除之后重新构建.构建完成之后重新生成的miniprogram-npm中会出现mobx-miniprogrammobx-miniprogram-bindings,构建方式以及构建完成新增文件夹如下:

在这里插入图片描述

3.使用说明

    第一步创建store对象用于存储共享的数据或是方法;
    第二步将store数据或是方法绑定到页面或是组件中;
    第三步页面或是组件中使用全局共享数据或是方法.
    下面以案例的形式分别说明如何在页面或是组件中进行全局数据共享.

3.1 page页面进行全局数据共享

示例说明:
    定义num1、num2、sum12,sum12为num1和num2的和,创建两个按钮,分别实现点击之后对num1进行加2或是减2的操作.同时sum12能随着num1值的变化同时进行改变.
在这里插入图片描述
创建store对象:
根目录中创建store文件夹,然后创建store.js文件.store.js中内容如下:

// 导入mobx-miniprogram中的observable方法 
import {observable} from 'mobx-miniprogram';
// 调用observable方法创建store对象实例并导出进行共享
export const store=observable({
	// 定义数据
	num1:1,
	num2:2,
	// 计算数据属性
	 get sum12() {
	  console.log("sum12方法执行")
	  return this.num1+this.num2
	},
	// 更新方法1用于修改num1的值
	updateNum1:action(function(step){
	this.num1+=step;
	}),
	// 更新方法2用于修改num2的值
	updateNum2:action(function(step){
	this.num2+=step;
	})
})

index.js中进行页面绑定store对象数据和方法:

// 导入创建store绑定方法
import {createStoreBindings} from 'mobx-miniprogram-bindings'
// 导入store实例对象
import {store} from '../../store/store'

Page({
 
  // 页面加载设置store绑定成员信息
  onLoad:function(){
	  this.storeBindings=createStoreBindings(this,{
	  store,
	  fields:['num1','num2','sum12'],
	  actions:['updateNum1']
	  })
  },
  // 页面卸载时清理处理
  onUnload:function(){
  	this.storeBingds=this.destroyStoreBindings()
  },
  // 按钮点击时触发的方法
  addNum(e){
  	// 执行修改num1方法并按照指定步长step进行相加
    this.updateNum1(e.target.dataset.step)
  }
})

index.wxml页面中使用共享数据或是方法:

<view>{{num1}} + {{num2}} = {{sum12}}</view>
<van-button type="primary" bindtap="addNum" data-step='{{2}}'>num1加2</van-button>
<van-button type="warning" bindtap="addNum" data-step='{{-2}}'> num1减2</van-button>

3.2 component组件进行全局数据共享

示例说明:
    定义num1、num2、sum12,sum12为num1和num2的和,创建两个按钮,分别实现点击之后对num2进行加3或是减3的操作.同时sum12能随着num2值的变化同时进行改变.创建test组件在index页面进行引用.
在这里插入图片描述
创建store对象同上示例,此处不再重述;
test.js中绑定store对象的数据或是方法:

import {storeBindingsBehavior} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'
  Component({
    behaviors:[storeBindingsBehavior], // 使用mobx-miniprogram-bindings中storeBindingsBehavior进行数据共享
    storeBindings:{
      store,
      fields:{  // 绑定数据,前者为组件中数据名,后者为store中定义的数据名,两者可不一致
        num1:'num1',
        num2:'num2',
        sum12:'sum12'
      },
      actions:{  // 绑定方法,前者为组件中方法名,后者为store中定义的方法名,两者可不一致
        updateNum2:'updateNum2'
      }
    }
})

test.wxml中调用store数据或是方法:

<view>{{num1}} + {{num2}} = {{sum12}}</view>
<van-button type="primary" bindtap="addNum" data-step='{{3}}'>num2加3</van-button>
<van-button type="warning" bindtap="addNum" data-step='{{-3}}'> num2减3</van-button>

index.wxml中引入test组件:

<view>{{num1}} + {{num2}} = {{sum12}}</view>
<van-button type="primary" bindtap="addNum" data-step='{{2}}'>num1加2</van-button>
<van-button type="warning" bindtap="addNum" data-step='{{-2}}'> num1减2</van-button>
<view>+++++++++++++++++++++++++++++++++++++</view>
<test></test>

最终实现效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西山科技将于12月6日上会:年收入2亿元,耗材收入成为新增长点

11月29日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;重庆西山科技股份有限公司&#xff08;下称“西山科技”&#xff09;将于2022年12月6日接受科创板上市委的现场审议。目前&#xff0c;西山科技已经更新了招股书&#xff08;上会稿&#xff09;。 据贝多财…

uni-app 使用 webview运行到小程序,打开萤石云视频

由于微信小程序特殊性&#xff0c;导致APP和h5适应的它都适应不了&#xff0c;因此&#xff0c;不得不对小程序做一些特殊的处理。 问题一&#xff1a;微信小程序无法打开web-view 的URL 相对于APP和H5而言&#xff0c;微信小程序比较严格&#xff0c;对于打开外链这种功能&a…

综述向:强化学习方法梳理(持续更新)

最近组内需要做强化学习相关研究&#xff0c;因为面对的是新项目&#xff0c;同事们对强化学习的原理都不太了解&#xff0c;我们就计划轮流在组内做一些不定期分享&#xff0c;补充相关的基础知识。于是我对强化学习的一些经典算法进行了梳理&#xff0c;并在此进行记录&#…

Observability:从零开始创建 Java 微服务并监控它 (一)

在本教程中&#xff0c;你将学习如何使用 Elastic 可观察性监控 Java 应用程序&#xff1a;日志、基础设施指标、APM 和正常运行时间。通过本教程&#xff0c;你将学到&#xff1a; 创建示例 Java 应用程序。使用 Filebeat 提取日志并在 Kibana 中查看你的日志。使用 Metricbe…

DPPE-PEG-Fucoidan 岩藻多糖-聚乙二醇-二棕榈酰基磷脂酰乙醇胺

DPPE-PEG-Fucoidan 岩藻多糖-聚乙二醇-二棕榈酰基磷脂酰乙醇胺 中文名称&#xff1a;岩藻多糖-二棕榈酰基磷脂酰乙醇胺 英文名称&#xff1a;Fucoidan-DPPE 别称&#xff1a;DPPE修饰岩藻多糖&#xff0c;DPPE-岩藻多糖 存储条件&#xff1a;-20C&#xff0c;避光&#xff…

Java - 缓冲输入输出流 (BufferedInputStream、BufferedOutputStream)

缓冲 Buffer 它是内存空间的一部分&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;这些存储空间用来缓冲输入或输出的数据&#xff0c;这部分空间就叫做缓冲区&#xff0c;缓冲区是具有一定大小的。 数据传输速度和数据处理的速度存在不平衡&#xff0c;例如每秒要写…

SwiftUI教程之如何在 Xcode 14 中创建曲线导航栏动画

让我们开始打开 ​​Xcode 14。我们将在 ContentView 中执行所有代码。首先,我要添加一些资产。 现在我们可以转到 ContentView 并开始编码了!💯 我们将要实现@Environment 协议、GeometryReader 和路径。 SwiftUI 中的@Environment 协议是什么? 使用Environment属性包…

用Python制造雪景图,体验 “ 人工下雪 ” 得快乐~

前言 大家早好、午好、晚好吖 ❤ ~ 今天起床&#xff0c;一看温度&#xff0c;赶忙穿上我的秋裤 一到外面&#xff0c;那风呼啦呼拉拉得吹&#xff0c;感觉我魂都跑了 别的地方已经下雪&#xff0c;而我才刚降温&#xff0c;而且还是骤降 都开始学习Python了&#xff0c;是时候…

计算机组成原理习题课第四章-2(唐朔飞)

计算机组成原理习题课第四章-2&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

WRKY转录因子通过促进GhMKK2介导的类黄酮生物合成调节棉花对尖孢镰刀菌的抗性

文章信息 题目&#xff1a;Group IIc WRKY transcription factors regulate cotton resistance to Fusarium oxysporum by promoting GhMKK2-mediated flavonoid biosynthesis 刊名&#xff1a;New Phytologist 作者&#xff1a;Lijun Wang&#xff0c;Chen Wang,Xingqi Guo…

利用FinalShell访问虚拟机

一、安装FinalShell 下载路径&#xff1a;https://pan.baidu.com/s/1uDIxLBnhrAQl_UqSHtD2Vw 提取码&#xff1a;fiaa 二、启动FinalShell 三、创建SSH连接 三、设置虚拟机主机名 1、查看虚拟机的主机名 命令&#xff1a;hostname 命令&#xff1a;cat /etc/hostname …

「Redis」01 NoSQL及Redis概述

笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程 Redis——NoSQL及Redis概述 技术的分类 解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN解决扩展性的问题&#xff1a;Struts、Spring、SpringMVC、Hibernate、Mybatis解决性能的问题&am…

大客车玻璃擦净器设计

目 录 摘 要 I ABSTRACT II 1 绪论 1 1.1选题背景及意义 1 1.2发展现状 2 1.3发展趋势 3 1.4研究主要内容 4 2 大客车玻璃擦净器总体方案设计 5 2.1 大客车玻璃擦净器设计思想 5 2.2功能分析 5 2.3工作原理分析 6 2.4功能分解 6 2.4.2传动系统 6 2.4.3真空吸盘 7 2.4.4 清洁刷 …

devtools安装

文章目录一、devtools安装二、参考、推荐、补充一、devtools安装 vue官网上找到vue-devtools的GitHub项目 https://github.com/vuejs/devtools 我选择放在E盘中新建的devtools文件中&#xff0c;解压 进入解压好的devtools-main文件夹中 这里默认已经下载了node 然后在命…

CML、LVPECL和LVDS

1、Current-mode drivers VS Voltage-mode drivers 2、CML&#xff08;Current Mode Logic&#xff09; CML drivers that are built from an open-drain differential pair and a voltage-controlled current source using NMOS transistors. The outputs (Output and Outp…

02_openstack私有云部署

目录 一、环境准备 1、准备服务器 2、主机名与域名配置 3、yum仓库配置 4、配置时间同步 二、安装Openstack与Nova依赖环境 1、Nova依赖软件包安装 2、Openstack依赖软件包安装 三、搭建私有云 1、环境检查 2、配置应答文件answer.ini 一、环境准备 1、准备服务器 …

NHS-PEG-Biotin,Biotin-PEG-NHS,活性酯peg生物素生物素PEG衍生物

Biotin-PEG-NHS&#xff08;NHS-PEG-Biotin&#xff09;是生物素PEG衍生物的一种&#xff0c;该化学试剂其中文名为活性酯-聚乙二醇-生物素&#xff0c;它所属分类为Biotin PEG NHS ester PEG。 peg试剂的分子量均可定制&#xff0c;有&#xff1a;活性酯-聚乙二醇2-生物素&am…

[附源码]计算机毕业设计springboot基于VUE的网上订餐系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

RabbitMQ交换机

假设工作队列背后&#xff0c;每个任务都恰好交付给一个消费者(工作进程)。而将消息传达给多个消费者&#xff0c;这种模式称为“发布/订阅”。 例&#xff1a;构建一个简单的日志系统。它将由两个程序组成&#xff1a;第一个程序将发出日志消息&#xff0c;第二个程序是消费者…

Educational Codeforces Round 108 (Rated for Div. 2) C. Berland Regional

翻译&#xff1a; Polycarp是伯兰ICPC区域活动的组织者。伯兰有&#x1d45b;所大学&#xff0c;编号从1到&#x1d45b;。波利卡普认识这个地区所有有竞争力的程序员。有&#x1d45b;学生:&#x1d456;-th学生在大学注册&#x1d462;&#x1d456;&#xff0c;有编程技能&…