当前位置: 首页 > news >正文

微信小程序状态管理与计算属性同时使用:miniprogram-computed 和 mobx-miniprogram

  • 两个框架扩展提供的 ComponentWithStoreComponentWithComputed 方法无法结合使用。
  • 如果需要在一个组件中既想使用 mobx-miniprogram-bindings 又想使用 miniprogram-computed解决方案是:
    1. 使用旧版 API

      • 自定义组件仍然使用 Component 方法构建组件,将两个扩展依赖包的使用全部改为旧版 API
      • mobx-miniprogram-bindings 官方文档
      • miniprogram-computed 官方文档
    2. 使用兼容写法

      • 即要么使用 ComponentWithStore 方法构建组件,要么使用 ComponentWithComputed 方法构建组件

      • 如果使用了 ComponentWithStore 方法构建组件,计算属性写法使用旧版 API

      • 如果使用了 ComponentWithComputed 方法构建组件,Mobx写法使用旧版 API

一、安装 miniprogram-computed 和 mobx-miniprogram

  1. 在项目的根目录下,使用如下命令,将快速在根目录下初始化生成一个 package.json 文件
    npm init -y
    
  2. 安装 miniprogram-computed 和 mobx-miniprogram
    npm install miniprogram-computed 
    
    npm install mobx-miniprogram mobx-miniprogram-bindings
    
  3. 然后 在 微信开发者工具 的左上角 点击 》工具》 构建 npm,构建成功后,将会在项目根目录下生成 miniprogram_npm 文件夹,可以在 miniprogram_npm 文件夹中看见构建的结果

二、在 ComponentWithStore 构建的组件中使用 计算属性

  1. 在项目的根目录下的 components 文件夹中(没有该文件夹的需要自己创建)新建 custom04 文件夹,并在该文件夹中创建 custom04组件(在文件夹上点击鼠标右键,选择 新建 component

  2. 找到项目根目录下的 app.json 文件,增加如下代码,将 custom04组件注册为 全局组件

    {
      // ...其他配置项
      
      "usingComponents": {
        "custom04": "./components/custom04/custom04"
      }
    }
    
  3. pages/index.wxml 中使用 custom04 组件

    <custom04 />
    
  4. 修改components/custom04/custom04.js 文件, Component 方法替换成 ComponentWithStore 方法

    // components/custom04/custom04.js
    import {
      ComponentWithStore
    } from 'mobx-miniprogram-bindings'
    
    // 导入计算属性 behavior
    const computedBehavior = require('miniprogram-computed').behavior
    
    ComponentWithStore({
      // storeBindings 不再复述
    
      // 注册 behavior
      behaviors: [computedBehavior],
      data: {
        a: 1,
        b: 2
      },
      computed: {
        total(data) {
          console.log('q23');
          return data.a + data.b
        }
      },
      watch: {
        'a,b': function (a, b) {
          console.log(`a更新之后的数据:` + a);
          console.log(`b更新之后的数据:` + b);
        }
      },
      methods: {
        updateData() {
          this.setData({
            a: this.data.a + 1,
            b: this.data.b + 1
          })
        }
      }
    
    })
    
  5. 修改components/custom04/custom04.wxml 文件

    <view>{{a}} + {{b}} = {{total}}</view>
    <button type="warn" bind:tap="updateData">修改数据</button>
    

三、在 ComponentWithComputed 构建的组件中使用 状态管理

  1. 在项目的根目录下创建 stores 文件夹,然后在该文件夹下新建 numStore.js 文件

  2. /stores/numStore.js 导入 observable action 方法。使用 observable 方法需要接受一个 store 对象,存储应用的状态

    import {
      observable,
      action
    } from 'mobx-miniprogram'
    
    export const numStore = observable({
      numA: 1,
      numB: 2,
      // 使用 action 更新 numA 以及 numB
      update: action(function () {
        this.numA += 1
        this.numB += 1
      }),
    
      // 计算属性,使用 get 修饰符,
      get sum() {
        return this.numA + this.numB;
      }
    })
    
  3. 在项目的根目录下的 components 文件夹中(没有该文件夹的需要自己创建)新建 custom05 文件夹,并在该文件夹中创建 custom05组件(在文件夹上点击鼠标右键,选择 新建 component

  4. 找到项目根目录下的 app.json 文件,增加如下代码,将 custom05 组件注册为 全局组件

    {
      // ...其他配置项
      
      "usingComponents": {
        "custom05": "./components/custom05/custom05"
      }
    }
    
  5. pages/index.wxml 中使用 custom05 组件

    <custom05 />
    
  6. 修改components/custom05/custom05.js 文件, Component 方法替换成 ComponentWithComputed 方法

    // components/custom05/custom05.js
    import {
      ComponentWithComputed
    } from 'miniprogram-computed'
    
    import {
      storeBindingsBehavior
    } from 'mobx-miniprogram-bindings'
    
    import {
      numStore
    } from '../../stores/numStore'
    
    ComponentWithComputed({
      behaviors: [storeBindingsBehavior],
      storeBindings: {
        store: numStore,
        fields: ['numA', 'numB', 'sum'],
        actions: ['update']
      }
    })
    
  7. 修改components/custom05/custom05.wxml 文件

    <!--components/custom05/custom05.wxml-->
    <view>{{numA}} + {{numB}} = {{sum}}</view>
    <button type="primary" bind:tap="update">更新store 中的数据</button>
    

相关文章:

  • vcenter 虚机共享盘笔记
  • 锦华新材业绩波动明显:偿债能力偏弱,大额分红引关注
  • 20250320在荣品的PRO-RK3566开发板的buildroot系统下使用J27口的OTG0口接鼠标
  • AI社交的服务走向
  • 【力扣刷题实战】只出现一次的数字III
  • CVPR2025 | 蚂蚁浙大提出MP-GUI算法:全方位增强MLLM的GUI理解能力
  • VLAN的处理机制
  • 爬虫——playwright获取亚马逊数据
  • Web爬虫利器FireCrawl:全方位助力AI训练与高效数据抓取
  • 服务器部署Kong和Konga过程
  • vue路由去掉#
  • 07. 面向对象高级(2)_设计模式
  • 基于ssm的在线点歌系统(全套)
  • 电源电路篇
  • python:AI+ music21 构建LSTM模型生成爵士风格音乐
  • Liunx安装elasaticsearch、ik分词器、kibana
  • 批处理文件:用gifsicle删除gif文件中的奇数帧
  • 【快递分拣员-Git介绍】
  • elsticsearch 通过reindex修改shards
  • 使用crash解析vmcore(fulldump)文件,基于qemu,arm64,linux6.6
  • 中国驻美大使:远离故土的子弹库帛书正随民族复兴踏上归途
  • 新时代,新方志:2025上海地方志论坛暨理论研讨会举办
  • 上海交大曾小勤:科技传播不应停留于知识搬运,要做科学思维的播种机
  • 六省会共建交通枢纽集群,中部离经济“第五极”有多远?
  • 中国社联成立95周年,《中国社联期刊汇编》等研究丛书出版
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前