redux的原理、工作流程及其应用方式

 更新时间:2023年07月04日 14:36:43   作者:小王日记a  
这篇文章主要介绍了redux的原理、工作流程及其应用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

redux原理、工作流程及其使用

  • Redux对于JavaScript应用而言是一个可预测状态的容器。
  • 换言之,它是一个应用数据流框架,而不是传统的像underscore.js或者AngularJs那样的库或者框架。

1、什么是redux?

redux是专门用于集中式管理状态的javascript库,他并不是react的插件库。

比如你有多个组件A-E都想要用同一个组件D中的状态:

1)像以前我们可以通过父子组件通信的方式让父组件进行传递状态,或者是让兄弟组件之间通过订阅发布进行通信

2)当我们使用了redux就可以直接通过让redux进行统一的状态管理,谁想要用状态就自己去拿,省去了第一种方法的层层传递

请添加图片描述

2、redux的工作流程

在我们了解redux的工作流程之前我们应该要知道redux有三个核心概念,分别为actions、store、reducers(带s的表明可能存在多个)

1)actions

actions英文直译过来就是行动、动作的意思,那么我们就可以猜到他表示的是“怎么做”,简单来说actions就是一个对象,actions里面有两个属性分别为typedata

  • type:标识属性,值为字符串且唯一,必要属性(你想要做什么事情
  • data:数据属性,值为任意类型,可选属性(你要做事情的数据

那我们浅浅举个栗子:

比如计算器你可以进行加1减2等操作,那么加减乘除这个操作就是你的type,数字就是你的数据

2)store

store有且只能有一个,他相当于一个最高指挥家,他负责把action动作交给对应的reducer进行执行,也就是说将state、action和reducer联系在一起的对象。

3)reducer

reducer用于将store发过来的action完成并将结果返回给store,他接收两个参数preState(旧状态)和action(动作)并返回一个newState(新状态)。

比如像计算器我们需要在原来的数据上进行加1的操作,那么旧状态旧对应原来的数据,action对应加1的操作,返回的新状态就是计算器加完之后重新返回的结果。

那么他的工作流程是什么样的呢?

在这里插入图片描述

1)首先我们要确定我们要做什么

2)让Action Creators创建action(也就是你要做的事情)

3)通过dispatch将action分发出去

4)store对要使用的reducer进行绑定,然后将action分发到对应的reducer上

5)在reducer上进行相应的action操作并返回结果给store

6)组件就可以通过store的API像store进行获取操作返回的结果

3、redux的举例说明

接下来我们会使用一个计算器的案例帮助大家更好的理解redux

1)Count组件

import store from '../../redux/store'
import { creatAdd, creatJian } from '../../redux/count_action'
export default class Count extends Component {
  ///相加
  addCount = () => {
    const { value } = this.selectValue///获取当前选择的值
    store.dispatch(creatAdd(value * 1))
  }
  //相减
  lessCount = () => {
    const { value } = this.selectValue
    store.dispatch(creatJian(value * 1))
  }
  render () {
    return (
      <div>
        <h2>当前计算器的值为:{store.getState()}</h2>
        <select ref={c => this.selectValue = c}>
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
        </select>
        <button onClick={this.addCount}>相加</button>&nbsp;
        <button onClick={this.lessCount}>相减</button>&nbsp;
      </div>
    )
  }
}

2)创建action

import { ADDCOUNT, CREATJIAN } from '../redux/constant'
export const creatAdd = data => ({ type: ADDCOUNT, data })
export const creatJian = data => ({ type: CREATJIAN, data })

3)store组件

import { legacy_createStore } from 'redux'
import countReducer from './count_reducer'
///将reducer和store联系起来
export default legacy_createStore(countReducer)

4)reducer组件

import { ADDCOUNT, CREATJIAN } from './constant'
const inin = 0
export default function countReducer (pre = inin, action) {
  ///从action解析出type和data
  const { type, data } = action
  ///通过类型进行匹配,判断怎么做
  switch (type) {
    case ADDCOUNT:
      return pre + data
    case CREATJIAN:
      return pre - data
    default:
      return pre
  }
}

5)contant常量

为防止出现拼写错误
export const ADDCOUNT = 'addCount'
export const CREATJIAN = 'lessCount'

6)当检测到redux中的状态发生变化时要进行更新渲染

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <App />
);
///在入口文件进行更新渲染
store.subscribe(() => {
  root.render(
    <App />
  )
})

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • ForwardRef useImperativeHandle方法demo

    ForwardRef useImperativeHandle方法demo

    这篇文章主要为大家介绍了ForwardRef useImperativeHandle方法demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 30分钟精通React今年最劲爆的新特性——React Hooks

    30分钟精通React今年最劲爆的新特性——React Hooks

    这篇文章主要介绍了30分钟精通React今年最劲爆的新特性——React Hooks,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • ReactJs实现树形结构的数据显示的组件的示例

    ReactJs实现树形结构的数据显示的组件的示例

    本篇文章主要介绍了ReactJs实现树形结构的数据显示的组件的示例,非常具有实用价值,需要的朋友可以参考下
    2017-08-08
  • react hooks 计数器实现代码

    react hooks 计数器实现代码

    这篇文章主要介绍了react hooks计数器实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • react native 获取地理位置的方法示例

    react native 获取地理位置的方法示例

    这篇文章主要介绍了react native 获取地理位置的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • react学习笔记之state以及setState的使用

    react学习笔记之state以及setState的使用

    这篇文章主要介绍了react学习笔记之state以及setState的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • React Class组件生命周期及执行顺序

    React Class组件生命周期及执行顺序

    这篇文章主要介绍了React Class组件生命周期,包括react组件的两种定义方式和class组件不同阶段生命周期函数执行顺序,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • React 中使用 Redux 的 4 种写法小结

    React 中使用 Redux 的 4 种写法小结

    这篇文章主要介绍了在 React 中使用 Redux 的 4 种写法,Redux 一般来说并不是必须的,只有在项目比较复杂的时候,比如多个分散在不同地方的组件使用同一个状态,本文就React使用 Redux的相关知识给大家介绍的非常详细,需要的朋友参考下吧
    2022-06-06
  • React Fiber原理深入分析

    React Fiber原理深入分析

    Fiber可以理解为一个执行单元,每次执行完一个执行单元,React Fiber就会检查还剩多少时间,如果没有时间则将控制权让出去,然后由浏览器执行渲染操作,这篇文章主要介绍了React Fiber架构原理剖析,需要的朋友可以参考下<BR>
    2023-01-01
  • React组件性能提升实现方法详解

    React组件性能提升实现方法详解

    这篇文章主要介绍了React组件性能最佳优化实践分享,React组件性能优化的核心是减少渲染真实DOM节点的频率,减少Virtual DOM比对的频率,更多相关内容需要的朋友可以参考一下
    2023-03-03

最新评论