【问题标题】:Getting warning when using components recursively in VueJS在 VueJS 中递归使用组件时收到警告
【发布时间】:2017-03-16 20:45:58
【问题描述】:

我正在 VueJS 中制作组件的递归树。我的 item 组件中有这样一行:

<item v-for="i in items" v-model="i"></item>

它工作正常,但 Vue 给了我这个警告:

您将 v-model 直接绑定到 v-for 迭代别名。这会 无法修改 v-for 源数组,因为写入 别名就像修改函数局部变量。考虑使用一个 对象数组,并在对象属性上使用 v-model。

我对这个警告感到困惑,因为我的应用程序似乎运行良好 - 我可以在我的项目树中添加、移动和删除节点。此错误消息是怎么回事 - 我应该担心吗?

【问题讨论】:

    标签: recursion vue.js


    【解决方案1】:

    您应该担心,因为您将无法在其他上下文中使用i 绑定到模型,例如观察者或过滤器等。

    这不是一个好的做法,警告是有效的。

    请考虑在您的data 中创建一个数组并将您的数据作为对象添加到其中,然后执行v-for 和绑定。它更安全。

    我之前有过类似的警告,但我无法处理变量,因为它们被视为本地警告

    【讨论】:

      【解决方案2】:

      错误是说,作为v-model 传递给&lt;item&gt; 组件的参数i 的更改不会反映在items 属性中。这是因为i 只是项目的别名,而不是实际项目。

      如果您不需要items 在每个&lt;item&gt; 组件的模型更改时更新,那么您无需担心。但是您可能确实希望 items 更新,因为您将项目中的每个元素作为 v-model 传递。

      为了正确引用每个项目并避免此警告,您可以使用索引访问items 数组中的每个元素。像这样:

      <item v-for="(item, index) in items" v-model="items[index]"></item>
      

      【讨论】:

        猜你喜欢
        • 2012-06-11
        • 1970-01-01
        • 2018-07-23
        • 2014-05-03
        • 1970-01-01
        • 2019-05-13
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        相关资源
        最近更新 更多