vue中使用v-if,v-else切换时input复用问题(vue底层深入)

mac2024-05-30  46

vue底层深入

问题:如果我们在有输入内容的情况下,切换了类型,我们会发现文字依然显示之前的输入内容。

示例代码:

示例效果:

 

按道理讲,我们应该是切换到了另一个input元素中,在另一个input元素中,我们并没有输入内容,为什么会出现这个问题?

 

因为Vue在进行DOM渲染时,出于性能考虑,会尽可能的复用已经存在的元素,而不是重新创建新的元素。

 

虚拟DOM会在每一个层级上进行对比,发现有些属性不一样的时候,会进行修改,把修改之后的属性值再渲染到真实DOM上,

在切换了方式后,虽然看起来是创建了一个新的input,但是Vue内部并不会给你创建一个新的input,它会用之前的input来替代你现在需要显示的input,进行显示到界面。

也就是说 原input中id=user 替换成 email,placeholder=用户账号 替换成 用户邮箱 ,而用户输入的value值进行了复用,所以,在切换之后,input的值依然是123

 

若是想要解决这个问题,则在input中指定一个唯一的key即可,记住:key是要不相等的一个值。

示例代码:

示例效果:

 

最新回复(0)