使用 Redux 管理全局状态

本文介绍了Redux,一个用于集中管理应用程序状态的框架,通过Dispatcher、Store和Action实现状态的控制和更新。重点讲解了reducer的规则和如何使用createSlice工具简化操作,以及如何避免副作用。

Redux 是个状态集中管理框架,状态可以跨组件共享,状态更新后,调用监听器。其实状态可以认为就是个全局对象,为什么要做一个框架来管理呢?如果我们自己使用一个全解字典来管理状态是不是也行?如果不做任何控制,维护很有挑战,随着项目的增大,状态就会失控,所有的逻辑都可以更新,一旦发现问题不知道是被哪个组件更新的。所以 Redux 有自己一套规则,包括 Dispatcher、Store、Action,更新的数据通过 store 的 dispatcher 进行发送,reducer 是实际更新逻辑处理的组件,reducer 可以理解为监听器,他只会处理关注的 Action。

Reducer 需要遵循一下规则

  1. 基于state 和 action 参数来计算新的状态值。
  2. 不允许修改现有状态。必须进行不可变更新,通过复制现有状态并更改复制的值。
  3. 他们不得执行任何异步逻辑、计算随机值或引起其他“副作用”。

官网抄来图,官网是动图,Redux 的概念比较简单,写起来有点儿绕,但是现有了 Toolkit,写了挺简单的。
在这里插入图片描述
看个例子, action type 是 name + reducers的 function,比如 increment,就是“counter/increment".

import { createSlice } from '@reduxjs/toolkit'

export const counterSlice = createSlice({
  name: 'counter',
  initialState: {
    value: 0
  },
  reducers: {
    increment: state => {
      state.value += 1
    },
    decrement: state => {
      state.value -= 1
    },
    incrementByAmount: (state, action) => {
      state.value += action.payload
    }
  }
})

export const { increment, decrement, incrementByAmount } = counterSlice.actions

export default counterSlice.reducer

export const selectCount = state => state.counter.value


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值