推荐一个用了就回不去的微信小程序+TypeScript框架 - mini-core

前言

        由于个人长期从事微信小程序开发,对于微信小程序开发中的一些不太方便的地方使用起来比较难受,于是催生了当前框架,快来看看原生开发都有些什么问题吧!

        个人见解或知识盲区,不喜勿喷!!

原生开发缺点

1. 取值和赋值繁琐 

        原生开发中,取值方式为this.data.x,赋值方式为this.setData({x: y}),如果代码量大,逻辑复杂。则可读性极差。

2. 对TypeScript支持性较差

        原生开发中,因为官方设计api时并未向TypeScript靠拢,而是采用option api的形式,既 Page({data: {x: y}}}) 与Component({data: {x: y}}),这种传统js的方式,后续官方通过泛型加入了对TypeScript的支持,但是多个泛型对代码组织结构和可读性都并不是很好的解决方案。

3. 代码冗余、结构不清晰

        对于开发中来说Page({data: {x: y}}}) 与Component({data: {x: y}})这样的代码是和业务逻辑无关系的,然而小程序开发中却需要这样来使用,造成代码组织结构嵌套过深。

4. 页面之间缺少有效的逻辑交互解决方案

        对于在下一个页面更改了数据,而需要在当前页面刷新数据这样的操作,通常需要实现当前页面的onShow声明周期方法,页面显示时对数据进行刷新。如果不加判断直接刷新,则会造成不必要的流量浪费和用户感知到页面的刷新,体验较差。如果判断则需要存储或者设置标识位,代码冗余且容易出错,且错误信息不易于排查。

5. 页面之间传递参数被统一处理为字符串,使用时需要手动进行类型装换

        下一个页面在接收上一个页面传入参数时,原生小程序会将所有类型的数据都转为字符串,如:true被转为了'true', 1被转为了'1', undefined被转为了'undefined',然而为了代码语义及增加代码可读性,我们需要将数据再次转为正确的类型,再进行代码逻辑编写,无疑增加了工作量和代码冗余。

6. 使用到的全局属性无法监听属性值是否被其他页面或组件修改

        对于整个应用的部分数据状态,我们需要记录到全局,以便多个地方共用,而原生的开发方式中,如果不去再次触发读取全局状态值,是无法感知到值是否被更改。

7. WXML文件中Mustache语法能力较弱

        WXML文件中Mustache语法对JS表达式支持较弱,微信给出的WXS解决方案对原生js语法支持度较低,且书写繁琐。而用户拿到后端返回数据时往往需要特殊处理才能正确显示在界面上。

8. 页面逻辑代码中无属性监听解决方案

        当数据变化时,需要手动调用方法触发逻辑更新,增加了代码耦合度。

如何使用

1. 项目配置支持TypeScript装饰器

        tsconfig.json文件中配置 "experimentalDecorators": true

2. 安装项目依赖

        npm install mini-core / yarn add mini-core

3. 微信开发工具选择构建npm   

4. 修改微信开发工具生成的模板配置

        小程序开发工具选择模板生成项目时,配置的编译工具不支持ts中的装饰器,所以需要自行移除以下配置,并通过其他方式来完成ts/saas/less的编译,修改project.config.json

// 移除以下配置信息
"useCompilerPlugins": [
  "typescript",
  "less"
],

5. 示例

 

示例核心代码

import {Bus, Controller, OnLoad, Reactive} from 'mini-core';
import {TodoItem} from '../../service';

@Controller
export default class Index {
  @Reactive
  public todoList: TodoItem[] = [{id: Date.now(), title: 'い 狂奔的蜗牛', finished: false}];

  @OnLoad
  public initEvent() {
    // 第三个为当前对象,传入后无需手动移除监听
    Bus.on(this, 'DELETE_TODO_ITEM', this.deleteTodoItem);
  }

  /**
   * 添加
   * @param e
   */
  public handleAdd(e: { detail: string }) {
    this.todoList.push({
      id: Date.now(),
      title: e.detail,
      finished: false
    });
  }

  /**
   * 已完成
   * @param e
   */
  public handleFinished(e: { detail: { id: number; finished: boolean } }) {
    const {id, finished} = e.detail;
    const item = this.todoList.find((item: TodoItem) => item.id === id);
    item!.finished = finished;
  }

  /**
   * 删除
   * @param id 删除项id
   */
  public deleteTodoItem(id: number) {
    const itemIndex = this.todoList.findIndex((item: TodoItem) => item.id === id);
    this.todoList.splice(itemIndex, 1);
  }
}

示例地址mini-core-todo-listhttps://github.com/llf137224350/mini-core-todo-list

都看到这了,要不继续了解下?在线文档http://www.uicoder.cn/mini_core_docs/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
使用TypeScript编写微信小程序时,可以遵循以下几个步骤: 1. 首先,需要在项目中引入TypeScript。可以通过在项目根目录下创建一个tsconfig.json文件来配置TypeScript编译选项。在tsconfig.json中,可以设置编译目标、模块解析方式、输出目录等。 2. 接下来,可以使用官方提供的TypeScript声明文件来增强对微信小程序API的类型检查和自动补全。可以通过在项目中安装@types/weixin-app的方式来获取这些声明文件。 3. 在编写微信小程序的页面和组件时,可以使用TypeScript的类和接口来定义页面和组件的数据、方法和生命周期。可以使用装饰器来标记页面和组件,并使用泛型来指定页面和组件的数据类型。 4. 在调用微信小程序的API时,可以使用泛型和接口来增强对API参数和返回值的类型检查。可以根据需要,使用import语句引入需要的API,并使用它们来进行网络请求、数据处理等操作。 总结起来,使用TypeScript编写微信小程序可以提供更好的代码组织结构和可读性。通过使用TypeScript的类型检查和自动补全功能,可以减少潜在的错误,并提高代码的可维护性和可扩展性。同时,可以使用TypeScript的特性来增强对微信小程序API的使用和理解。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [推荐一个用了就回不去微信小程序+TypeScript框架 - mini-core](https://blog.csdn.net/llf1991/article/details/124170619)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [TypeScript封装微信小程序请求实战](https://blog.csdn.net/weixin_44665959/article/details/123410276)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [webpack + typescript 开发微信小游戏实践](https://blog.csdn.net/yanxiaomu/article/details/122857396)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值