组件创建完成以后是否可以手动修改props

来源:10-5 Modal组件编码

慕莱坞0998854

2021-05-18

老师你好,我想创建一个createModal函数,回想起createMessage函数,其实现为以下这段
图片描述
在timeout之后就销毁message
那么现在是modal组件,我们该在什么时候去销毁呢?在关闭之后销毁,那么我们该把这段代码放在哪个地方呢?放在Modal组件内部?我尝试着把逻辑写在创建组件实例之后
图片描述
图片描述

如上,在关闭Modal的时候,emit一个destroy事件,在创建modalInstance之后,手动给props上添加一个onDestroy函数,
代码运行没问题,
但是仔细观察_props以下划线开头,似乎意味着这是个私有的变量是不希望被外部使用的,所以我有点迷茫,我们不可以在创建组件实例之后在手动修改props吗?

写回答

1回答

张轩

2021-05-18

同学你好 很专业的问题 instance 上面的 props 的值是不可以更改的,这个值是 readonly 的,你可以在组件内部创建一个响应式对象, const messageCopy = ref(props.message) 然后在实例上改变这个值。

const mountNode = document.createElement('div')
document.body.appendChild(mountNode)
// vm 返回的是整个组件响应式对象 你可以 console 出来看看
const vm = messageInstance.mount(mountNode) as any
setTimeout(() => {    
    vm.messageCopy = 'new message'}, 
timeout)


0
3
慕莱坞0998854
回复
张轩
谢谢老师,原来createApp返回的是"应用",然后这个应用的mount方法返回的才是组件实例! 涨知识了
2021-05-18
共3条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程