为了账号安全,请及时绑定邮箱和手机立即绑定

Vuejs:数据属性更改时组件不重新渲染

Vuejs:数据属性更改时组件不重新渲染

皈依舞 2023-02-17 17:36:48
我有一个布尔类型的属性 - websiteHasCode,它从商店中获取一个值。我想有条件地使用 websiteHasCode(true 或 false)在页面中呈现 html,最初组件 A 很好(websiteHasCode 的正确值)。页面中有一个模态,它是组件A的子组件B,模态具有更新存储值的功能-isCodeActive。所以当它更新时我希望变量 websiteHasCode 也更新并最终更新 Dom,所以我使用了一个观察者并按照这个 SO 问题进行了计算,但它似乎没有更新。谁能帮助我在这里做错了什么?<template>   <div>    <div v-if="websiteHasCode">          ...............    </div>    <div v-else>          ................    </div>  </div></template><script>    export default {        name: "dashboard",        props: [],        data() {            return {                websiteHasCode: Boolean,            }        },        mounted() {            this.websiteHasCode = this.$store.state.isCodeActive;        },        computed: {          isCodeActive () {            return this.$store.state.isCodeActive;          }        },        watch: {          isCodeActive: {            handler() {              console.log(this.websiteHasCode) // returns false              this.websiteHasCode = this.$store.state.isCodeActive;              console.log(this.websiteHasCode) // returns true but dom does not re-render            },            deep: true          },        },      }</script>这也是观察状态变化的最佳方法吗,还有更好的方法吗?
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

除非你想根据 isCodeActive 的值做其他事情,否则对计算使用观察器是没有意义的,只需在你的 v-if 中直接使用计算,如下所示:


<template> 

  <div>

    <div v-if="isCodeActive">

          ...............

    </div>

    <div v-else>

          ................

    </div>

  </div>

</template>

    


<script>

    export default {

        name: "dashboard",

        props: [],

        data() {

            return {

                websiteHasCode: Boolean, // not sure why you're initializing with "Boolean" here, it should be false

            }

        },

        computed: {

          isCodeActive () {

            return this.$store.state.isCodeActive;

          }

        },

      }

</script>

此外,您将 websiteHasCode 属性初始化为“Boolean”而不是 false。可能是 vue 将其视为真实值,因此不会更新布局。


查看完整回答
反对 回复 2023-02-17
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号