redux 基础概念--redux(1)

本文将先介绍redux的一些基础概念,然后再聊聊其中的核心理念和相关原则。

Redux 的构成

我们知道,reduxStoreReducerAction三个部分组成。其中,Action是把数据从应用(视图)传到store的有效载体,是store数据的唯一来源;Reducer则指定了应用状态的变化如何响应actions并发送到store,换句话说:"actions 只是描述了有事情发生这一事实,而 reducer 则是描述应用如何更新 reducer。"

一些使用原则

store 唯一

当我们使用redux的时候,我们的整个state被储存在一个Object中,并且这个Object只存在于唯一的一个store中。

js 复制代码
console.log(store.getState())

/* 输出
{
  visibilityFilter: 'SHOW_ALL',
  todos: [
    {
      text: 'Consider using Redux',
      completed: true,
    },
    {
      text: 'Keep all state in a single tree',
      completed: false
    }
  ]
}
*/

State 只读

我们不能直接修改State

唯一改变State的方法就是触发ActionAction是一个用于描述已发生事件的普通对象。

这样做有几个好处:

  1. action仅表达修改意图,视图和网络请求都不能直接修改state,不会出现修改顺序的问题。
  2. action本身只是对象,可获取可操作。

Action 常见的结构如下

js 复制代码
{
    type: 'xxxx',
    body: 'xxxx'
}

所以我们可以通过如下函数很容易的制造 Action

ts 复制代码
const actionCreator = type => body => ({type, body});

调用的话执行两个函数就行。

使用纯函数来执行修改

我们知道action只是描述,真正对state做更改的具体行为还是reducer,Reducer 只是一些纯函数,它接收先前的 state 和 action,并返回新的 state。

举个例子:

js 复制代码
function visibilityFilter(state = 'SHOW_ALL', action) {
  switch (action.type) {
    case 'SET_VISIBILITY_FILTER':
      return action.filter
    default:
      return state
  }
  .........
}

特性

单向数据流

严格的单向数据流意味着应用中所有的数据都遵循相同的生命周期,这样可以让应用变得更加可预测且容易理解。同时也鼓励做数据范式化,这样可以避免使用多个且独立的无法相互引用的重复数据。

redux 生命周期

  1. 我们调用store.dispatch(action);

这里就是在说,我们需要做一个啥事情,

  1. Redux store调用传入的reducer函数

这里就是先进行计算一下:Store 会把两个参数传入 reducer: 当前的 state 树和 action。

Store 会把两个参数传入 reducer: 当前的 state 树和 action。

  1. 根 reducer 应该把多个子 reducer 输出合并成一个单一的 state 树。

把多个计算结果统一

  1. Redux store 保存了根 reducer 返回的完整 state 树。

得到结果

那么这就是本篇文章的全部内容啦,我们从基本概念聊到了核心原则,然后聊到了Redux的一些特性,下一篇文章我们会聊一些Redux的使用~

相关推荐
kyriewen116 分钟前
你等的Babel编译,够喝三杯咖啡了——用Rust重写的SWC,只需眨个眼
开发语言·前端·javascript·后端·性能优化·rust·前端框架
IT_陈寒18 分钟前
SpringBoot自动配置坑了我,原来要这样绕过去
前端·人工智能·后端
东方小月29 分钟前
Claude Code 完整上手指南:MCP、Skills、第三方模型配置一次搞定
前端·人工智能·后端
XZ探长1 小时前
基于 Trae Solo 移动办公修复 Vue3 前端服务问题
前端
小程故事多_801 小时前
[大模型面试系列] 深度解析ReAct框架,大模型Agent的“思考+行动”底层逻辑
人工智能·react.js·面试·职场和发展·智能体
逍遥德1 小时前
AI时代,计算机专业大学生学习指南
java·javascript·人工智能·学习·ai编程
蝎子莱莱爱打怪1 小时前
Claude Code 省 Token 小妙招:RTK + Caveman 组合拳
前端·人工智能·后端
Rkgua1 小时前
JS中模拟函数重载的使用
javascript·jquery
竹林8181 小时前
用 wagmi v2 和 Next.js 14 硬扛 NFT 市场前端:从合约调用失败到批量上架,我踩了这些坑
javascript·next.js
Momo__2 小时前
Vue 3.6 Vapor Mode:跳过虚拟 DOM,性能极致优化
前端·vue.js