关于vue3中响应式依赖注入provide/inject
2023-12-16 22:13:58
关于# vue3中响应式依赖注入
场景:适合单组件(多层嵌套组件),解决父组件的响应式数据能够传递给所有子组件(包括孙子组件及以下)
优点:数据同步更新,并同步渲染视图,耦合逻辑处理更容易处理,更好的开发体验,推荐provide/inject 而非 vuex(繁琐)
// 父组件 script setup
// 创建响应式数据
const parentFormData = ref({});
// 依赖数据 - 定义 provide readonly不允许子组件直接修改 parentFormData,以免混乱
provide('parentFormData', readonly(parentFormData));
// 修改依赖变量 parentFormData 的方法
const changeReactivityReadonlyData = (val: any) => {
// 合并对象
Object.assign(parentFormData.value, val);
};
// 依赖函数
provide('changeParentFormData', changeReactivityReadonlyData);
const formData = reactive<T>({
id: '',
name: ''
})
// 传递 - 响应式, reactive 需要转一层解构才能保持响应式
changeReactivityReadonlyData({ ...toRefs(formData) });
// 子组件 script setup
// 定义any 是为了防止 parentFormData.value ts提示,可以研究一下 InjectionKey 的做法
const parentFormData: any = inject('parentFormData');
const changeParentFormData: any = inject('changeParentFormData');
const subFormData = ref<T>({
age: ''
})
// 传递响应式, ref 需要 .value 在转一层, 保持响应式
changeParentFormData(toRefs(formData.value));
文章来源:https://blog.csdn.net/qq_38828542/article/details/134979545
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!