Vue 父子组件数据不同步的解决方案

有一个 layout.vue,是网站的布局文件,包含 header.vue , main.vuefooter.vue, 文件代码如下:

<template>
<container id="app">
    <headerBar></headerBar>
    <Main></Main>
    <footerBar></footerBar>
</container>
</template>

<script>
import headerBar from '@/components/headerBar'
import fooerBar from '@/components/footerBar'
import Main from '@/components/index'

export default {
  components: {
        headerBar,
        Main,
        footerBar
  }
}
</script>

一般情况下, headerBar 中会包含登录用户的信息, 假设我们使用 Vuex 来管理数据,如果我们在 <Main></Main> 组件中注销用户时,此时在 Main 组件中的 user 值已被注销,但是 headerBar 组件中的 user 值还存在,并未自动更新, 这样会造成组件间状态不同步的问题.

解决方式是在 headerBar 中用 computed 注册属性, 而不是在 data() 中注册.
上代码:

<template>
  <div v-if="session == null ">
          <router-link :to="{ name: 'Login', params: {} }">登录</router-link>
</div>
<div v-else>
        欢迎: {{ user.username }}
</div>
</template>

import store from '@/store'

export default {
    name: 'headerBar',
    computed: {
        user() {
            return this.$store.state.user
        },
        session() {
            return this.$store.state.session
        }
    },
    store
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 序 今年大前端的概念一而再再而三的被提及,那么大前端时代究竟是什么呢?大前端这个词最早是因为在阿里内部有很多前端开...
    一缕殇流化隐半边冰霜阅读 13,845评论 19 92
  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 23,333评论 8 124
  • “家,简单一个字,能引起无数人的情感共鸣,因为家是每一个人最初的记忆,也是我们最终的归宿。莫尔说为了寻找想要的...
    梦缘_21阅读 2,463评论 0 0
  • 项目简述 1.1项目简述 苏州xx电陶科技股份有限公司成立于2002年,位于江苏省昆山市,毗邻上海、苏州,交通极为...
    普实软件阅读 4,919评论 0 1
  • 上海,我曾幻想几经周折的拥有一份工作。 一到上海,猎聘、58同城双管齐下。猎聘的投下去七八份,没见反应,后...
    李蓝LL阅读 2,675评论 1 1

友情链接更多精彩内容