返回

惊艳!Vue 2.6 新功能,助你玩转响应式对象,打造轻量级 Stores

前端




Vue.js 2.6 中的一项新特性是,你现在可以在组件作用域之外创建响应式对象。这意味着当你使用这些对象时,它们将在发生变化时触发相应的渲染更新。这使得创建简单的 stores 成为可能,无需使用 Vuex,非常适合于一些简单的场景,比如说仅需要跨组件共享外部状态。

让我们通过一个简单的例子来说明如何做到这一点。想象你有一个名为 currentUser 的响应式对象,你想在多个组件中使用它。在 Vue 2.6 之前,你必须使用 Vuex 来实现这一点。但是现在,你可以简单地创建一个全局的响应式对象,如下所示:

// 在 main.js 中
const currentUser = Vue.observable({
  name: 'John Doe',
  email: 'johndoe@example.com'
});

Vue.prototype.$currentUser = currentUser;

一旦你创建了这个全局的响应式对象,你就可以在任何组件中使用它,如下所示:

// 在 MyComponent.vue 中
export default {
  template: `<p>Hello, {{ $currentUser.name }}!</p>`
};

currentUser 对象发生变化时,MyComponent 组件将自动重新渲染。

响应式数组和响应式对象

你也可以创建响应式数组和响应式对象。这使你能够创建更复杂的存储,例如一个包含多个用户的列表。要创建一个响应式数组,你可以使用 Vue.observable() 方法,如下所示:

// 在 main.js 中
const users = Vue.observable([
  { name: 'John Doe', email: 'johndoe@example.com' },
  { name: 'Jane Doe', email: 'janedoe@example.com' }
]);

Vue.prototype.$users = users;

一旦你创建了这个响应式数组,你就可以在任何组件中使用它,如下所示:

// 在 MyComponent.vue 中
export default {
  template: `
    <ul>
      <li v-for="user in $users">{{ user.name }}</li>
    </ul>
  `
};

users 数组发生变化时,MyComponent 组件将自动重新渲染。

响应式计算属性

你还可以创建响应式计算属性。这允许你基于其他响应式属性创建新的响应式属性。要创建一个响应式计算属性,你可以使用 Vue.computed() 方法,如下所示:

// 在 main.js 中
const totalUsers = Vue.computed(() => {
  return $users.length;
});

Vue.prototype.$totalUsers = totalUsers;

一旦你创建了这个响应式计算属性,你就可以在任何组件中使用它,如下所示:

// 在 MyComponent.vue 中
export default {
  template: `<p>Total users: {{ $totalUsers }}</p>`
};

users 数组发生变化时,MyComponent 组件将自动重新渲染。

结论

Vue 2.6 中的新响应式对象功能为创建简单的跨组件共享状态的 stores 提供了新思路。这非常适合于一些简单的场景,比如说仅需要跨组件共享外部状态。

希望这篇文章对您有所帮助。如果您有任何问题,请随时在评论区留言。