redux和Vuex的使用示例

简介: redux和Vuex的使用示例

Vuex和Redux都是状态管理库,它们的工作原理和区别如下:

  1. Vuex定义了state、getter、mutation、action四个对象,而Redux定义了state、reducer、action。
  2. Vuex中state统一存放,方便理解;Redux中state依赖所有reducer的初始值。
  3. Vuex有getter,目的是快捷得到state;Redux没有这层,react-redux mapStateToProps参数做了这个工作。
  4. Vuex使用可变数据,而Redux使用不可变数据。
  5. Vuex通过Actions来处理异步操作,可以在Actions中执行异步逻辑,然后再提交Mutations来修改状态;而Redux可以使用中间件(如redux-thunk、redux-saga)来处理异步操作。

下面是一个简单的Vuex示例,用于管理一个购物车中的商品数量:

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
cartCount: 0
},
mutations: {
increment (state) {
state.cartCount++;
},
decrement (state) {
state.cartCount--;
}
},
actions: {
addToCart ({ commit }, product) {
commit('increment');
},
removeFromCart ({ commit }, product) {
commit('decrement');
}
}
});
export default store;

在组件中,可以通过this.$store来访问Vuex的state、getter、mutation和action。例如,以下代码将显示购物车中的商品数量:

<template>
<div>
<p>Your cart has {{ cartCount }} items.</p>
</div>
</template>
<script>
export default {
computed: {
cartCount () {
return this.$store.state.cartCount;
}
}
};
</script>

下面是一个简单的Redux示例,用于管理一个计数器的状态:

首先,需要安装Redux和React-Redux库:

npm install redux react-redux

创建一个Redux store:

import { createStore } from 'redux';
import rootReducer from './reducers';
const store = createStore(rootReducer);

编写一个reducer来管理计数器的状态:

import { INCREMENT, DECREMENT } from './actions';
const counterReducer = (state = 0, action) => {
switch (action.type) {
case INCREMENT:
return state + 1;
case DECREMENT:
return state - 1;
default:
return state;
}
};

定义一些actions来改变计数器的状态:

export const increment = () => ({ type: 'INCREMENT' });
export const decrement = () => ({ type: 'DECREMENT' });

在React组件中使用Redux store:

import { connect } from 'react-redux';
import { increment, decrement } from './actions';
const Counter = ({ count, onIncrement, onDecrement }) => (
<div>
<p>Count: {count}</p>
<button onClick={onIncrement}>Increment</button>
<button onClick={onDecrement}>Decrement</button>
</div>
);
const mapStateToProps = (state) => ({ count: state });
const mapDispatchToProps = { increment, decrement };
export default connect(mapStateToProps, mapDispatchToProps)(Counter);
相关文章
|
5月前
|
存储 JavaScript 开发者
Pinia和Vuex的区别
Pinia和Vuex的区别
1049 0
|
5月前
|
JavaScript 开发者
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
109 4
|
2月前
|
JavaScript 前端开发 中间件
像Vuex一样使用redux
【8月更文挑战第16天】像Vuex一样使用redux
26 2
像Vuex一样使用redux
|
5月前
|
JavaScript 前端开发 中间件
vuex/redux的区别
vuex/redux的区别
44 2
|
5月前
|
存储 JavaScript
vuex的基本用法
Vuex是Vue.js的状态管理库,用于集中存储和管理共享状态。通过创建Vuex store实例,定义`state`(如`count`)和`mutations`(如`increment`),组件可使用`this.$store.state`访问状态,`this.$store.commit`修改状态。当应用复杂时,可将状态分割成带命名空间的模块,如`cart`,组件内通过`this.$store.state.cart`和`this.$store.commit(&#39;cart/addItem&#39;)`进行访问和修改。
|
5月前
|
存储 JavaScript
vuex和pinia区别
vuex和pinia区别
223 0
|
5月前
|
存储 JavaScript 前端开发
Vuex 和 Redux 的区别?
Vuex 和 Redux 的区别?
59 1
|
5月前
|
存储 JavaScript
Vuex和Redux的区别
Vuex和Redux的区别
|
5月前
|
缓存 JavaScript
vuex的讲解与相关用法
vuex的讲解与相关用法
25 0
|
5月前
|
存储 JavaScript
vue3中如何使用vuex
首先,在这里回答一个粉丝的问题,为什么有local storage 和session storage还要使用vuex,这里我解释一下,我们要明白浏览器的存储和vuex的存储的不同点,首先,浏览器存在本地,vuex存在内存里,所以vuex刷新会丢失,从现在来看,好像存在浏览器里会更好,但是,有个问题时,存在浏览器里不是响应式的啊,只有存在vuex才是响应式啊,我们通过计算属性或者watch监听下在同步更新下就行,但是,浏览器不支持响应式,所以,我们为了规避掉vuex的的刷新丢失的问题,所以,当刷新时,从浏览器的存储里拿数据,防止在vuex里面,在传给组件,借助vuex的特性,来实本地存储响应式。