首先,我个人的浅显理解是Vuex与Redux都是完整的状态管理库工具,而Pinia和ReactHooks是简洁的但是可以符合绝大多数需求的状态管理库工具。如有问题请指正,随时修改更新。
自定义hooks
核心思路是在函数中,利用useState存储数据,useEffect初始化数据,然后return出来。
Redux
三个中心: 1.store 仓库,类似vuex和pinia的state 2.reducer 纯函数,类似vuex的mutation 3.actions 动作,类似pinia和vuex的actions
使用
const store = createStore(reducer)
修改
store.dispatch(action)
vuex对比pinia
pinia是一个轻量级的状态管理库,目的是尽量简单。大多数时候使用pinia就可以符合需求。基于vue3的composition构建。
vuex相比起来是一个更完整的状态管理库,提供了更多的功能,比如模块化、插件和严格模式等。基于vue2的options Api构建。
Vuex
vuex基于vue2的options Api构建 三个中心: 1.state 类似于vue2中的data 2.mutation 修改state的唯一途径 3.actions 可以包含任意异步操作 注意:actions中使用commit修改调用mutation去修改state
actions:{
async getState({commit}){
commit('mutationName',value)
}
}
Pinia
基于vue3的composition构建
使用:
import {createPinia} from 'pinia' createAPP(App).use(createPinia).mount('#app')
三个概念:
1.state 类似vue2中的data
2.getter 类似computed
3.actions 类似vuex中mutation和action的结合体
创建
import {defineStore} from 'pinia'
export const useStore = defineStore('main',{
id:'main',
state:() => {return {//要定义的数据}},
getters:{//要定义的getters的方法},
actions:{//要定义的actions的方法},
})
组件中使用
import {useStore} from './store'
const store = useStore()
修改
传入函数
store.$patch(state =>{
state.age = 1000
state.arr.push(5)
})
传入对象
store.$patch({...})
替换
store.$state({})
重置
store.$reset()