Vue3中 给子组件绑定的数据不动态更新怎么办?用watchEffect解决

396 阅读1分钟

watchEffect变化响应函数

watchEffect 是vue3中新增的一个函数,他的作用是:在这个函数内的变量,一旦值发生变化,该函数就会运行,前提是这个值是要被动态代理过的。

具体使用方法如下:

父组件

<template>
    <user-list :users="users"/>
</template>
<script lang="ts" setup>
import UserList from '@/components/user/List.vue';
import { ref } from 'vue';
//声明users,并转为动态代理模式
let users = ref([]);
function init() {
   list User().then(res => {
       //异步获取用户列表
       users.value = res.data;
   })
}
init();
</script>

子组件

<template>
   <ul>
       <li v-for="item in users">{{item.name}}</li>
   </ul>
</template>
<script lang="ts" setup>
import { ref,defineProps } from 'vue';

const props = defineProps({
  users: Array,
})

let users = ref([]);
//关键
watchEffect(() => {
  users.value = props.users || [];
})

</script>