Vue3的一些问题清单

1: 关于 setup 中没有 this 的问题
官方文档是这么解释的:在 setup() 内部,this 不会是该活跃实例的引用,因为 setup() 是在解析其它组件选项之前被调用的,所以 setup() 内部的 this 的行为与其它选项中的 this 完全不同。这在和其它选项式 API 一起使用 setup() 时可能会导致混淆。这意味着,除了 props 之外,你将无法访问组件中声明的任何属性---本地状态,计算属性/方法。

但是从源码实现你会发现其实组件实例创建在前,函数之所以访问不到 this,是因为它在执行 setup 函数的时候,就没有把组件实例 instance 传给 setup。也没有把 this 指向实例 instance。So 执行顺序其实是:组件实例创建在 setup 函数执行之前,但是 setup 执行的时候,组件还没有 mounted,而晚于 beforeCreate 钩子,早于 create 钩子。

2: reactive VS ref
刚开始看文档时,大家往往会去拿这两个去对比,总结一下:

reactive API: 可以把一个对象数据变成响应式(等同于 2.x 中的 Vue.observable()),Composition API 更推荐用户主动定义响应式式数据,而非内部的黑盒处理

ref: 针对数组 or 对象本质就是reactive实现的,读取值时是ref.value

另外注意一下toRefs: 针对组合函数返回响应式对对象时使用 toRefs, 本质上是帮我们做了一层getter和setter处理,解构就可以得到响应式的数据,这也就降低了一些关于ref的心智负担

3: 关于 watch:对于监听对象是分隔字符串时,需要在选项参数中指定 deep: true
// vue2.x
watch: {
    'data.distance': function (newVal, oldVal) {
      if (newVal === constants.DISTANCE_ON) {
        ...
      }
    },
},
 
 
// vue3.x
watch(
   () => this.data.distance,
   (newVal, oldVal) => {
        if (newVal === constants.DISTANCE_ON) {
            ...
        }
   },
   { deep: true },
 )
 

4. 配置全局自定义参数

在 Vue2.x 中我们可以通过 Vue.prototype 添加全局属性 property。但是在 Vue3.x 中需要将 Vue.prototype 替换为 config.globalProperties 配置:

// Vue2.x
Vue.prototype.$api = axios;
Vue.prototype.$eventBus = eventBus;

// Vue3.x
const app = createApp({})
app.config.globalProperties.$api = axios;
app.config.globalProperties.$eventBus = eventBus;

5.当接口中的ID过长,无法正常读取时

像这种很长的ID无法正常读取,我们可以使用forEach先将它循环出来,然后在利用BigInt底层把他转换为数组进行读取
 

.then(res => {
            res.data.forEach((item: any) => {
              item.id = BigInt(item.id)
            });
            homeViewData.value = res.data;
            console.log(homeViewData.value);
        });

这就就能很好的读取数据啦

6.修改组件的样式
vue3中可以使用v-deep实现修改,也可以使用内部样式修改(style)

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值