记录一下使用vue/vuex+SSR框架遇到的bug

本文介绍了一个Vue项目中遇到的问题:由于state.jkyl对象在未登录状态下丢失了其双向绑定关系,导致登录后数据更新但视图未刷新。文中详细解释了解决方案,即通过设置默认值来保持绑定关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目框架:vue+vuex+vue-server-render

问题描述:页面中有个区块通过state.jkyl (JSON Object)来控制是否需要显示,页面未登录前jkyl的数据是为空的,待登录后再重新获取就有值了,但是页面中的区块依然不显示

原因分析:在未登录时获取数据时为空了,导致state.jkyl对象的双向绑定关系被清掉了。后面登录后再赋值,没有形成双向绑定关系导致页面视图未更新。

处理方法:在赋值时加默认值 {}, 见下方mutations.js的代码

 

 

代码示例如下:

store.js

const store = {

    jkyl = {}

}

actions.js

function getData(commit){

       // 这里是ajax

       axios.get('xxx').then((data) => {

        let product= data.data;

        ...

         commit('SET_ALL_DATA', {product}); 

      })

}

mutations.js

const SET_ALL_DATA = (state, payload) => {

  let product = payload.product;

  state.jkyl = product.jkyl;  // 未登录时这里为undefined了,所以没有建立绑定关系,所以即使后面有值了,也不会更新视图,解决办法是加个默认的空对象,用于维持双向绑定:state.jkyl = product.jkyl || {} 

};

getters.js

const getJkyl = (state) => { state.jkyl }

home.vue

<templae>

<div>

...

 <dv v-if="jkyl && jkyl.list && jkyl.list.length"> ... </div>

...

</div>

</template>

<script>

export default {
    asyncData(){

  return Promise.all([this.getData()])

   },

    mounted() {

           // 监听登录事件,再次发请求获取数据,这个时候jkyl是有值的,但是界面还是不显示

           xxx.on('loginSuccess',() => { this.getData() });

   },

   methods: {

      ...mapActions(['getData'])

   },

    computed: {

          ...mapGetters({

             jkyl: 'getJkyl'       

          })

   }

}

</script>

 

转载于:https://www.cnblogs.com/mjian/p/9346773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值