首页 文章

父状态更改后,Vue组件未更新

提问于
浏览
0

我有Vue组件从props接收json数据,在此渲染子组件之后使用 v-for 并将此数据作为prop传递 . 一切正常,直到我尝试从此列表中删除一个项目,当我删除它时,它会错误地删除元素 . 在vue devtools中,我看到父级正确接收数据但未正确呈现 . 谁能帮我?这是我的代码:https://gist.github.com/giokaxo/3d291b9b7b8ef97f81dc83799c430302

2 回答

  • 1

    使用v-for渲染元素时使用“key”属性,例如:

    <p v-for="(product, index) in order.products" :key="i">..</p>
    
  • 1

    相关文件是here

    您可以直接在自定义组件上使用v-for,例如任何普通元素:<my-component v-for =“item in items”:key =“item.id”> </ my-component>
    在2.2.0中,当对组件使用v-for时,现在需要一个密钥 . 但是,这不会自动将任何数据传递给组件,因为组件具有自己的隔离范围 . 为了将迭代数据传递给组件,我们还应该使用props:<my-component
    项目中的v-for =“(项目,索引)”
    V-绑定:项= “项目”
    V-绑定:指数= “索引”
    V-绑定:键= “item.id”>
    </我的组分>
    不自动将项目注入组件的原因是因为这使得组件与v-for的工作方式紧密耦合 . 明确其数据来自何处使得组件在其他情况下可重用 .

    here

    当Vue更新使用v-for渲染的元素列表时,它默认使用“就地补丁”策略 . 如果数据项的顺序已经改变,而不是移动DOM元素以匹配项的顺序,Vue将简单地就地修补每个元素并确保它反映应该在该特定索引处呈现的内容 .

    ...

    要为Vue提供一个提示,以便它可以跟踪每个节点的标识,从而重用和重新排序现有元素,您需要为每个项目提供唯一的键属性 . key的理想值是每个项目的唯一ID .

相关问题