说说你对Redux的理解?其工作原理?

简介: 说说你对Redux的理解?其工作原理?

redux?



React是用于构建用户界面的,帮助我们解决渲染DOM的过程


而在整个应用中会存在很多个组件,每个组件的state是由自身进行管理,包括组件定义自身的state、组件之间的通信通过props传递、使用Context实现数据共享


如果让每个组件都存储自身相关的状态,理论上来讲不会影响应用的运行,但在开发及后续维护阶段,我们将花费大量精力去查询状态的变化过程


这种情况下,如果将所有的状态进行集中管理,当需要更新状态的时候,仅需要对这个管理集中处理,而不用去关心状态是如何分发到每一个组件内部的


redux就是一个实现上述集中管理的容器,遵循三大基本原则:


单一数据源

state 是只读的

使用纯函数来执行修改

注意的是,redux并不是只应用在react中,还与其他界面库一起使用,如Vue


工作原理



redux要求我们把数据都放在 store公共存储空间


一个组件改变了 store 里的数据内容,其他组件就能感知到 store的变化,再来取数据,从而间接的实现了这些数据传递的功能


工作流程图如下所示:

![根据流程图,可以想象,React Components 是借书的用户, Action Creactor 是借书时说的话(借什么书), Store 是图书馆管理员,Reducer 是记录本(借什么书,还什么书,在哪儿,需要查一下), state 是书籍信息


整个流程就是借书的用户需要先存在,然后需要借书,需要一句话来描述借什么书,图书馆管理员听到后需要查一下记录本,了解图书的位置,最后图书馆管理员会把这本书给到这个借书人


转换为代码是,React Components 需要获取一些数据, 然后它就告知 Store 需要获取数据,这就是就是 Action Creactor , Store 接收到之后去 Reducer 查一下, Reducer 会告诉 Store 应该给这个组件什么数据


如何使用



创建一个store的公共数据区域


import { createStore } from 'redux' // 引入一个第三方的方法
const store = createStore() // 创建数据的公共存储区域(管理员)


还需要创建一个记录本去辅助管理数据,也就是reduecer,本质就是一个函数,接收两个参数state,action,返回state


// 设置默认值
const initialState = {
  counter: 0
}
const reducer = (state = initialState, action) => {
}


然后就可以将记录本传递给store,两者建立连接。如下:

const store = createStore(reducer)


如果想要获取store里面的数据,则通过store.getState()来获取当前state

console.log(store.getState());


下面再看看如何更改store里面数据,是通过dispatch来派发action,通常action中都会有type属性,也可以携带其他的数据

store.dispatch({
  type: "INCREMENT"
})
store.dispath({
  type: "DECREMENT"
})
store.dispatch({
  type: "ADD_NUMBER",
  number: 5
})


下面再来看看修改reducer中的处理逻辑:

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case "INCREMENT":
      return {...state, counter: state.counter + 1};
    case "DECREMENT":
      return {...state, counter: state.counter - 1};
    case "ADD_NUMBER":
      return {...state, counter: state.counter + action.number}
    default: 
      return state;
  }
}


注意,reducer是一个纯函数,不需要直接修改state

这样派发action之后,既可以通过store.subscribe监听store的变化,如下:

store.subscribe(() => {
  console.log(store.getState());
})


React项目中,会搭配react-redux进行使用

完整代码如下:

const redux = require('redux');
const initialState = {
  counter: 0
}
// 创建reducer
const reducer = (state = initialState, action) => {
  switch (action.type) {
    case "INCREMENT":
      return {...state, counter: state.counter + 1};
    case "DECREMENT":
      return {...state, counter: state.counter - 1};
    case "ADD_NUMBER":
      return {...state, counter: state.counter + action.number}
    default: 
      return state;
  }
}
// 根据reducer创建store
const store = redux.createStore(reducer);
store.subscribe(() => {
  console.log(store.getState());
})
// 修改store中的state
store.dispatch({
  type: "INCREMENT"
})
// console.log(store.getState());
store.dispatch({
  type: "DECREMENT"
})
// console.log(store.getState());
store.dispatch({
  type: "ADD_NUMBER",
  number: 5
})
// console.log(store.getState());


小结


  • createStore可以帮助创建 store
  • store.dispatch 帮助派发 action , action 会传递给 store
  • store.getState 这个方法可以帮助获取 store 里边所有的数据内容
  • store.subscrible 方法订阅 store 的改变,只要 store 发生改变,store.subscrible 这个函数接收的这个回调函数就会被执行


后言



创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力


目录
相关文章
|
8天前
|
存储 JavaScript 前端开发
Redux原理
【10月更文挑战第26天】Redux通过单一数据源、只读状态、纯函数修改状态等核心概念,以及清晰的工作流程和中间件机制,为JavaScript应用程序提供了一种强大而可预测的状态管理方案。它与React等视图库的结合能够有效地实现数据驱动的视图更新,提高应用程序的可维护性和可扩展性。在实际应用中,根据项目的具体需求和复杂度,可以灵活地运用Redux及其相关的工具和技术,来构建高效、稳定的前端应用。
62 33
|
3月前
|
存储 JavaScript 前端开发
Redux 有什么优点?
【8月更文挑战第31天】
42 0
|
6月前
|
存储 JavaScript 前端开发
Redux 与 Vuex:探索它们的设计思想及应用差异
Redux 与 Vuex:探索它们的设计思想及应用差异
|
6月前
|
JavaScript 前端开发 中间件
redux 有什么优缺点
redux 有什么优缺点
153 0
|
6月前
|
存储 JavaScript 前端开发
redux实现原理?
Redux 是一个 JavaScript 状态管理库,它可以用于管理应用程序中的状态。Redux 的实现原理可以简单概括为以下几个步骤:
44 0
|
JavaScript 中间件 API
redux原理是什么
redux原理是什么
91 0
|
JavaScript 前端开发 中间件
Redux原理及工作流程
Redux原理及工作流程
125 0
|
JavaScript 前端开发 中间件
redux的实现原理是什么,核心代码?
redux的实现原理是什么,核心代码?
|
监控 JavaScript 前端开发
React-Redux 100行代码简易版探究原理
各位使用 react 技术栈的小伙伴都不可避免的接触过redux + react-redux的这套组合,众所周知 redux 是一个非常精简的库,它和 react 是没有做任何结合的,甚至可以在 vue 项目中使用。
|
JavaScript 前端开发 中间件
Redux 原理探索
Redux 是一个非常不错的状态管理库,和 Vuex 不同的是 Redux 并不和 React 强绑定,你甚至可以在 Vue 中使用 Redux。当初的目标是创建一个状态管理库,来提供最简化 API。
118 0