为什么通过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: {
}
})结果:

问题一:全局数据是否默认就是响应式数据?
问题二:不用toRef解构,如何让页面上的值同步变化?
26
收起
正在回答 回答被采纳积分+1
2回答
慕的地9440514
2023-06-27 16:54:21
过了很久博主应该学完了,这里解释一下给后面的同学看下,用ref包裹的话拿到的是name = name:{value:'dell'}
存储仓库本身是响应式的直接可使用,但这里ref包裹返回出去的是这里的name就不是仓库里的nam了,所以直接修改name.value='什么什么'就能看到效果了


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星