微信小程序体验composition-api(类似vue3)

微信小程序composition-api用该是什么样子?

使用

使用起来应该像是这个样子

wxue(options)

setup

配置应该是包含一个setup选项是一个函数,返回的函数可以this.xxx调用,返回的数据可以this.data.xxx用到,如下

1import { wxue, reactive } from 'wxue' 2 3wxue({ 4 setup(options) { 5 const test = reactive({ 6 x: 1, 7 y: 2, 8 }) 9 10 setInterval(() => { 11 test.x++ 12 }, 1000) 13 14 return { 15 test, 16 } 17 }, 18}) 19ref

api

应该有如下api

  • reactive

  • ref

  • unref

  • toRef

  • toRefs

  • computed

  • watchEffect

  • watch

  • 各种钩子,与小程序生命周期一致

示例

1import { wxue, nextTick, ref, onShow } from 'wxue' 2 3function useAutoAdd(x) { 4 const b = ref(x) 5 setInterval(() => { 6 b.value++ 7 }, 1000) 8 return b 9} 10 11wxue({ 12 data: {}, 13 setup(options) { 14 const b = useAutoAdd(2) 15 16 onShow(() => { 17 console.log('onShow form hooks', this) 18 }) 19 20 function getXx() { 21 console.log(this, 'getXx') 22 } 23 24 return { 25 c: b, 26 getXx, 27 test, 28 } 29 }, 30 onLoad: function (options) { 31 setTimeout(() => { 32 this.test() 33 console.log(this.data.b) 34 }, 5000) 35 this.getXx() 36 }, 37 test: function () { 38 nextTick(() => { 39 console.log(this.data.a.b) 40 }) 41 this.data['a.b'] = 111 42 this.data['a.c'] = 111 43 }, 44})

wxue

跟 vue 的 composition-api 类似,小程序端的逻辑复用的解决方案。

介绍

由于参照vue,暂且叫他wxue吧。提供了vuecomposition-api类似的用法。wxue源码 跪求star~

安装

npm i wxue -S

wxue

wxue(options)

options中需要配置setup,并且setup是一个函数

setup

返回一个对象,可包含对象或者是函数,函数将会挂载到this中,对象将挂载到data

reactive

返回对象的响应数据。

1import { wxue, reactive } from 'wxue' 2 3wxue({ 4 setup(options) { 5 const test = reactive({ 6 x: 1, 7 y: 2, 8 }) 9 10 setInterval(() => { 11 test.x++ 12 }, 1000) 13 14 return { 15 test, 16 } 17 }, 18})

ref

接受一个内部值并返回一个反应性且可变的ref对象。ref对象具有.value指向内部值的单个属性。

1import { wxue, ref } from 'wxue' 2 3wxue({ 4 setup(options) { 5 const x = ref(1) 6 7 setInterval(() => { 8 x.value++ 9 }, 1000) 10 11 return { 12 x, 13 } 14 }, 15})

unref

如果参数是 ref,则返回内部值,否则返回参数本身。

toRef

可用于 ref 在源反应对象上为属性创建

1const test = reactive({ 2 x: 1, 3 y: 2, 4}) 5const x = toRef(test, 'x') 6return { x }

toRefs

将反应对象转换为普通对象,其中所得对象的每个属性都 ref 指向原始对象的相应属性,可用于解构

1const test = reactive({ 2 x: 1, 3 y: 2, 4}) 5const { x } = toRefs(test) 6return { x }

computed

计算属性 返回的值返回一个不变的反应性 ref 对象。

1const computedX = computed(() => x.value + 1) 2return { computedX }

watchEffect

它会在反应性地跟踪其依赖关系时立即运行一个函数,并在依赖关系发生更改时重新运行它。stop 停止监听

1const count = ref(0) 2const stop = watchEffect(() => console.log(count.value)) 3setTimeout(() => { 4 count.value++ 5 if (count.value === 100) { 6 stop() 7 } 8}, 1000)

watch

观察者数据源可以是返回值的 getter 函数,也可以直接是 ref, stop 停止监听

1const count = ref(0) 2const state = reactive({ count: 0 }) 3const stop = watch(ref, (count, prevCount) => { 4 /* ... */ 5}) 6const stop2 = watch( 7 () => state.count, 8 (count, prevCount) => { 9 /* ... */ 10 } 11) 12stop() 13stop2()

hooks

支持小程序的所有生命周期 onLoad,onReady,onShow,onHide,onUnload,onPullDownRefresh,onReachBottom,onShareAppMessage

1import { wxue, onShow } from 'wxue' 2 3wxue({ 4 setup(options) { 5 onShow(() => { 6 console.log('onShow form hooks') 7 }) 8 }, 9})

setData(page, data)

优化的setData,多次调用将合并成一次执行

nextTick()

setData是异步的,在setData执行后完成后执行的回调nextTick

1// 1 返回Promise 2await nextTick() 3// 2 执行回调 4nextTick(() => {})

其他

this.data的 set 进行了劫持,会调用setData

最后

欢迎大家提出宝贵的意见,如有错误还望评论区不要客气,大家共同学习,一起进步。github: https://github.com/kouchao/wxue,跪求star~

本文转转自微信公众号前端历劫之路原创https://mp.weixin.qq.com/s/Zp0NiqYFKcrqTn7A3kz92Q,如有侵权,请联系删除。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

thinkcmf+jsapi 实现微信支付

首先从小程序端接收订单号、金额等参数,然后后台进行统一下单,把微信支付的订单号返回,在把订单号发送给前台,前台拉起支付,返回参数后更改支付状态。。。回调publicfunctionnotify(){$wechatDb::name('wechat')where('status',1)find();

Vue3学习笔记---常用Composition API

1.拉开序幕的setup1.理解:Vue3.0中一个新的配置项,值为一个函数2.setup是所有ComponsitionAPI(组合API)“表演的舞台”3.组件中所用到的:数据,方法等等,均要配置在setup中4.setup函数的两种返回值:1.若返回一个对象,则对象中的属性、方法、在模板中均可以直接使用(重点关注!)2.若返回一