Vue3和react状态管理之Redux与Pinia的使用比较

本文比较了Vue3中的Pinia与React的Redux在状态管理中的使用,包括初始配置、开发工具、仓库初始化、获取和修改状态、异步操作、getter(计算属性)、持久化和监听器。建议在使用时封装selector和dispatch以提高类型安全性,并探讨了两者在持久化和监听状态变化上的差异。
摘要由CSDN通过智能技术生成

初始配置

pinia:

1.通过create-vue脚手架在命令行选择pinia模板生成
2.在项目后续添加使用npm add pinia也可以添加并追加模板

redux:

1.使用create-react-app脚手架带的pinia模板通过npx create-react-app my-app --template redux-typescript生成
2.在项目后续添加使用npm add redux也可以添加但不能追加模板,需要自己配置

开发工具

pinia:集成在vue-devtoolredux: react-devtool分离,需要独立下载redux-devtool

初始化总仓库

pinia:创建一个store文件夹>每个仓库扁平化存储(没有入口文件,现拿现取,直接在引入对应仓库)

redux:

1.创建一个store文件夹>index.ts入口文件,引入所有仓库的导出的Reducer,统一管理所有的仓库

import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit';
import counterReducer from '../features/counter/counterSlice';

export const store = configureStore({reducer: {//每次创建一个新仓库必须导出各自reducer并在此导入(可以利用构建工具批量导入)counter: counterReducer,}, middleware: getDefaultMiddleware =>getDefaultMiddleware({serializableCheck: false,}),
});
export type RootState = ReturnType<typeof store.getState>
export type AppDispatch = typeof store.dispatch
export type AppThunk<ReturnType = void> = ThunkAction<ReturnType, RootState, unknown, Action<string>> 

2.所有仓库另外放在festures存储

初始化一个仓库

pinia:

import { defineStore } from "pinia";
export const useCountStore = defineStore({
	id: "countStore",
	state: () => ({
		count:0
	}),
	actions: {
		increment(number) {
		this.count+=number
		}
	},

}); 

redux:

import { createSlice } from '@reduxjs/toolkit'

const demoStore = createSlice({//对标idname: 'demo',//对标初始化stateinitialState: { count: 0 },//对标actionreducers: {//vuex有点类似于redux的写法,state不能解构,action可以解构 increment(state, action) {state.count += action.payload} },
})
//导出actions
export const { increment } = demoStore.actions
//导出reducer给入口文件注册仓库
export default demoStore.reducer 

获得仓库中的值

pinia:直接通过模块化的方式获取仓库

//引入仓库
import { useCountStore } fro
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值