当前位置: 首页 > 知识库问答 >
问题:

避免在可重用组件中直接修改道具

冯阳云
2023-03-14

我试图重用我在组件文件中创建的自定义下拉列表,其中道具是下拉列表中的值选项。当我开始选择下拉列表时,我意识到一个vue warn msg:

[Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“道具”

最佳做法是什么

<template>
  <v-app>
    <SearchSelect
        v-model="newItem.a"
        :options="aList"></SearchSelect>
    <SearchSelect
        v-model="newItem.b"
        :options="bList"></SearchSelect>
    <SearchSelect
         v-model="newItem.c"
         :options="cList"></SearchSelect>
  </v-app>
</template>



<script>
export default {
  name: "Sales",
  data() {
    return {
       aList: [
          { value: "A1", text: "A1" },
          { value: "A2", text: "A2" },
          { value: "A3", text: "A3" },
          { value: "A4", text: "A4" },
          { value: "A5", text: "A5" }
       ],
       bList: [
          { value: "B1", text: "B1" },
          { value: "B2", text: "B2" },
          { value: "B3", text: "B3" }
       ],
       cList: [
          { value: "C1", text: "C1" },
          { value: "C2", text: "C2" },
          { value: "C3", text: "C3" }
       ],
     }
   }
  }
};
</script>

共有1个答案

景永望
2023-03-14

您将向父级发出事件,而不是更改属性。然后父对象会对该值进行变异,新值通常会回流回子对象的属性。

父级中的v-model指令通过将其“拥有”的数据绑定到:value属性并侦听@input v-on事件来工作。

在您的情况下,newItem.a的所有者应该正在更新它,但最有可能的是SearchSelect正在设置它,而不是发出事件。

您还可以通过使用状态管理避免将$emit发送给父级,在这种情况下,存储将成为真相的来源;然后您将commitdispatch而不是emit

 类似资料:
  • 我有一个组件,我想在不同的页面上使用。嗯,它在第一次切换之前工作良好。它显示像以前一样,但是当我单击“关闭”按钮时,它会关闭,但是控制台输出: [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“可见” 发现于 --- 在那之后点击就不显示了 有办法解决这个问题吗? Snackbar.vue 我ogin.vue

  • 我是Vue JS的新手,我遇到了这个问题,我试图通过将父道具传递给孩子来制作数据表 我犯了这个错误 [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具正在变异:“editem” 这是我的密码 这是我的页面: 这是我的组件:

  • 我得到警告: app.js:87486[Vue警告]:避免直接更改prop,因为每当父组件重新呈现时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。被变异的道具:“喜欢计数” 我的刀锋 Vue代码

  • 如何解决此错误消息: [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“抽屉” 父组件: 子组件:

  • 升级到Vue 2.0我有很常见的问题 我得到警告: 避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。正在变异的道具:“用户名”(在组件中找到) 我读了很多次文档,但仍然不明白如何修复它。 和在主Vue应用中声明。 这是我的代码: 我尝试了,但它似乎不起作用,我不明白为什么。它应该将该值绑定到父级(主Vue应用程序)

  • 本文向大家介绍componentWillUpdate可以直接修改state的值吗?相关面试题,主要包含被问及componentWillUpdate可以直接修改state的值吗?时的应答技巧和注意事项,需要的朋友参考一下 react组件在每次需要重新渲染时候都会调用, 例如,我们调用 时候 在这个函数中我们之所以不调用是因为该方法会触发另一个,如果我们中触发状态更改,我们将以无限循环结束.