我正在迁移到Vue3,所以请原谅我不只是使用Pinia.我有一个这样的减速器:

export const mutations: MutationTree<UiState> = {
  SET_LOADING: (state, loading) => {
    Object.assign(state, loading); // before Vue3 this was Vue.set(...) for reactivity
  },
};

像这样的测试

it('should set consultationLoading', () => {
  const state = uiState();
  const loading = true;
  const { SET_LOADING } = mutations;
  SET_LOADING(state, loading);
  expect(state.loading).toBe(loading);
});

由于我不能再使用Vue.set()(从import Vue from 'vue';开始),我只是按照另一篇文章中的建议使用Object.assign.但是状态在测试中没有更新.

推荐答案

Vue.set的目的是触发一个更新,由于Vue 2的限制,它通常不会通过赋值工作,这在Vue 3中不再是问题.

这是JavaScript而不是react 性问题.现在是Object.assign(obj, bool),什么都不做.

应该是:

Object.assign(state, { loading: true })

这与以下内容相同:

state.loading = true 

Vue.js相关问答推荐

Nuxt3-Vue中的useRoute和useRouter有什么区别

如何在 vue 路由中导航到 Bootstrap-vue 选项卡中的特定选项卡?

vuejs:将props传递给javascript中的组件?

vue.js 在 App.vue 中获取路由名称

正确实现 Vue.js + DataTables

Vue.js 中 Chrome 和 Datalist 的性能问题

React.js 是否有类似 Vue.js

Amazon EC2 错误:监听 EACCES 0.0.0.0:80

数据更新后触发 Vue.js 事件

Vue路由保持活动和挂载行为

如何在 NPM 上创建和发布 Vuejs 组件

VS代码中的红点是什么意思

为什么 v-model 不适用于数组和 v-for 循环?

使用 Vue-cli,我在哪里声明我的全局变量?

使用 Vue.js & DataTable(jquery 插件)

将 ref 的内容从子组件传递到另一个 VueJS 子组件

在 VueJS 中使用 Axios - 这个未定义

如何访问通用 javascript 模块中的当前路由元字段

单击 v-select 项目时如何获取对象而不是单个值?

如何在 vue3 中的setup方法中发出事件?