toRefs和reactive

toRefs和reactive

// 列表内容相关的逻辑
const useCurrentListEffect = (currentTab, shopId) => {
  const content = reactive({ list: [] })
  const getContentData = async () => {
    //想在api url后面传 ?tab=参数,请求的时候分开两个参数来传
    const result = await get(`/api/shop/${shopId}/products`, {
      tab: currentTab.value
    })
    if(result?.errno === 0 && result?.data?.length) {
      content.list = result.data;
    }
  }
  watchEffect(() => { getContentData() })
  const { list } = toRefs(content)
  return { list }
}

老师,为什么本节课转为reactive

const content = reactive({ list: [] })

之后,还要实行转为toRefs

  const { list } = toRefs(content)

为什么?这是做什么用处,没看懂

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕星星 2022-03-10 18:19:46

同学你好,解答如下:

1、reactive换为ref也可以,记得加上value属性,例如

https://img1.sycdn.imooc.com//climg/6229cefe09025fdb05680234.jpg

用了ref后面也是用toRefs。

2、看下reactive和toRefs的原理

https://class.imooc.com/lesson/2155#mid=50986

https://img1.sycdn.imooc.com//climg/6229cf5009be770909610036.jpg

toRefs会将数据中属性值变为ref形式响应数据,和reactive作用不一样。

3、toRefs接收的是响应式对象,不能用普通对象,否则会有警告,类似与下面的

https://img1.sycdn.imooc.com//climg/6229d0b709523d5305810023.jpg

自己再理解下。

  • 提问者 localhost999 #1

    老师

    -------------引用-------------------------

    toRefs接收的是响应式对象,不能用普通对象”“toRefs会将数据中属性值变为ref形式响应数据,和reactive作用不一样

    -----------------------------------------

    那为什么不

    一开始不进行转换成reactive

    最后直接转成ref不就可以了吗?

    2022-03-10 18:36:26
  • 提问者 localhost999 #2

    既然最终目的是ref,为什么还要先转reactive再转ref。直接一开始不转reactive,最后直接转ref不行吗老师

    2022-03-10 18:38:08
  • 好帮手慕星星 回复 提问者 localhost999 #3

    请再仔细看一下回答内容,toRefs()方法参数必须是响应式数据,不能是普通对象,所以不能不用reactive转。

    2022-03-11 10:26:32
好帮手慕星星 2022-03-10 10:35:10

同学你好,reactive包装list,会变为响应式数据。而这里给list重新赋值了,是普通的数组,当解构之后数据不再具有响应式

https://img1.sycdn.imooc.com//climg/6229632909d9333105040216.jpg

所以为了重新具有响应式,用toRefs()进行包装。

之前基础课程中有讲解到类似的,可以回顾下:

https://class.imooc.com/lesson/2155#mid=50983

祝学习愉快!

  • 提问者 localhost999 #1

    为了重新具有响应式,用toRefs()进行包装。

    老师,list一开始是使用reactive包装成响应式的,为什么后面赋值变成非响应式后,不直接使用reactive变回响应式,而使用toRefs转成响应式?

    2022-03-10 17:23:53
  • 提问者 localhost999 #2

    如果一开始是使用ref包装成响应式的,后面也是用toRefs吗?

    2022-03-10 17:47:23
  • 提问者 localhost999 #3

    如果一开始数据是使用ref包装成响应式的,后面数据进行赋值后变成了非响应式,也是用toRefs令其变回响应式吗?

    2022-03-10 17:48:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师