卡比记账项目——Vue中ref和reactive

634 阅读2分钟

使用场景

一般比较简单的变量比如布尔我们会选择使用ref const a = ref(false) 比较复杂的变量比如对象可以选择使用reactive const formData = reactive({a:xxx,b:yyy})

本质上没有什么区别,都是代理变量。

选中tag

现在我们要实现能够选取tag。使用v-model来完成。 在Tag组件中添加v-model

截屏2022-11-22 14.45.33.png

进入Tags.tsx组件,props中添加一个selected属性,类型为Number。由于要适配v-model,所以还要加上emits。

截屏2022-11-22 14.46.45.png

添加onSelect事件

截屏2022-11-22 14.50.33.png

截屏2022-11-22 14.50.44.png

可以选择tag了

截屏2022-11-22 14.56.29.png

inputPad组件中 输入日期和数值

思路:依然选择两个v-model来进行双向绑定 定义两个ref分别用来标记记账时间以及记账金额。

截屏2022-11-22 19.16.17.png

并进行v-model

截屏2022-11-22 19.01.09.png 来到inputPad中,props加入这两个属性

截屏2022-11-22 19.01.39.png

所以我们不再需要原有的refDate,可以替代成happenAt,但是我们的new date是字符串,回到time.tsx让其支持字符串类型

截屏2022-11-22 19.07.23.png

触发事件改一下:

截屏2022-11-22 19.17.35.png 在inputPad的上面显示一下当前的时间

截屏2022-11-22 19.17.56.png

Amount金额

做金额不能像时间一样,不能在用户点击过程中就刷新,需要一个中间变量。 先在提交时添加事件,

截屏2022-11-22 19.25.59.png 测试一下:

截屏2022-11-22 19.26.18.png 但是在清零的时候是不能自动回0,需要再点击记账。同时vue也给了个警告,说type不对。

截屏2022-11-22 19.27.22.png

我们需要做一些调整

先把number变成string 截屏2022-11-23 14.24.53.png 提交时把string变回number 截屏2022-11-23 14.25.06.png 成功消除警告。

记账实现

现在已经做好了绝大部分功能,只差点击记账即可把数据记录在服务器了,现在进行实现。

回到ItemCreate,现在还没有监听提交。在InputPad上添加一个submit的监听。

截屏2022-11-23 14.52.32.png

到InputPad中props里面加入onSubmit, 截屏2022-11-23 14.52.45.png

点击记账时触发一下submit事件 截屏2022-11-23 14.53.11.png

在onSubmit中发送请求:

截屏2022-11-23 15.00.46.png

这样子写不好,所以我们用reactive对ref进行一个改写

截屏2022-11-23 15.07.36.png