【问题标题】:Can't update data based on props无法根据 props 更新数据
【发布时间】:2021-09-24 05:59:39
【问题描述】:

我有一个组件层次结构,A、B 和 AccountCard。在组件 A 中,我执行了一个帐户验证,并将结果通过 props 传递给组件 B,基于 props 的组件应该更新数据并将其传递给子组件 AccountCard。如果我使用下面的方法,我会收到错误“无法读取未定义的属性‘isActiveAccount’”。基于这个变量,我必须显示一个或另一个按钮。如何根据 props 更新数据?

{
.....
<template>
    <AccountCard
      v-for="(item, index) in accountDetails"
      :key="index"
      :item="item"
    />
</template>
export default {
  components: {
    .....
  },
  props: {
    isActiveAccount: {
      type: Boolean,
      default: false
    }
  },
  data: () => ({
    ......
    accountDetails: [
      {
        isActive: this.isActiveAccount,
      }
    ]
  })
}

【问题讨论】:

    标签: vue.js vue-component vuex vuejs3


    【解决方案1】:

    当道具改变时,如果你想更新数据值,那么使用下面的方法

    export default {
      components: {
        .....
      },
      props: {
        isActiveAccount: {
          type: Boolean,
          default: false
        }
      },
      data: () => ({
        ......
        accountDetails: {
            isActive: false, // set inital value to be null if you want to check if the watch handler is really working
          }
      }),
     watch: {
        isActiveAccount(newVal) {
         this.accountDetails.isActive = newVal; //Change added
     },
    }
    

    更改:我建议您不要将其作为数组保存,而是将其保存为对象。此外,手表会在挂载完成后立即触发,所以您不必担心

    【讨论】:

    • 组件创建时需要更新数据怎么办?
    • 这行不通,因为它是数组的一部分。您需要遍历数组并更新所有项目。
    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    相关资源
    最近更新 更多