为什么通过ref声明响应式变量页面不对应渲染?

为什么通过ref声明响应式变量页面不对应渲染?

老师你好,

我不用toRefs,直接声明或使用ref声明获取全局数据,全局数据有修改成功(控制台打印是修改后的lee),但页面显示的数据却没变。

代码:

<template>
  <div>{{name}}</div>
  <button @click='handleClick'>修改</button>
</template>
<script>
import { ref } from 'vue';
import { useStore } from 'vuex';
export default {
  name: "App",
  setup(){
    const store = useStore();
    // 方式一:直接获取全局数据name
    const name = store.state.name;
    // 方式二:声明为ref获取,也不行,页面没修改
    // const name = ref(store.state.name);
    const handleClick = () => {
      store.commit('changeName','lee');
    }
    return { name, handleClick };
  }
};
</script>
<style lang="scss">
</style>

store/index.js

import { createStore } from 'vuex'

export default createStore({
  state: {
    name: 'dell'
  },
  getters: {
  },
  mutations: {
    changeName(state, str) {
      state.name = str;
      console.log(state.name);  // 全局数据有修改,但页面没变
    }
  },
  actions: {
  },
  modules: {
  }
})

结果:

https://img1.sycdn.imooc.com//climg/637d9acb0934056007290526.jpg

问题一:全局数据是否默认就是响应式数据?

问题二:不用toRef解构,如何让页面上的值同步变化?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
慕的地9440514 2023-06-27 16:54:21

过了很久博主应该学完了,这里解释一下给后面的同学看下,用ref包裹的话拿到的是name = name:{value:'dell'}

存储仓库本身是响应式的直接可使用,但这里ref包裹返回出去的是这里的name就不是仓库里的nam了,所以直接修改name.value='什么什么'就能看到效果了

  • name = {value:'dell'}

    应该是这样写多了一个name:


    2023-06-27 17:01:43
好帮手慕小李 2022-11-23 13:43:07

同学你好,解答如下:

1、全局数据是响应式数据。同学打印一下就可以看到了。

https://img1.sycdn.imooc.com//climg/637dadbb09a6fc9c06800178.jpg

2、直接用$store.state.name实现。如下

https://img1.sycdn.imooc.com//climg/637db2d309b9320b16640940.jpg

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师