Redux的基础用法详解(纯函数的概念)

简介: 和vue中的vuex一样,react也有进行状态管理的工具,最近自己在学习这一块的内容所以在此记录一下

前言

和vue中的vuex一样,react也有进行状态管理的工具,最近自己在学习这一块的内容所以在此记录一下

什么是Redux

Redux是JS的状态容器,提供了可预测的状态管理。JavsScript的状态容器就是装状态的容器,React中,状态就是state。因此我们所谓的JS的状态容器就是去存储状态state的容器。通常在大型项目中使用Redux进行状态管理

为什么需要Redux

  1. React管理不断变化的state是非常困难的,需要通过constructor去定义state,要通过this.setState去修改这个state。
  2. React是在视图层帮助我们解决了DOM的渲染过程,但是State依然是留给我们自己来管理。之前学习过的组件传值props、context等等,
  3. 当没有使用redux的时候我们实现兄弟组件传值是比较麻烦的,代码很复杂冗余。

Redux的使用

  1. 安装
npm init -y
npm i redux -D
  1. 使用

新建一个index.js文件,在index.js去定义相关的内容,下面我直接把关键的地方写上了对应的注释,注意要记住redux中的三个核心:store、action、reducer

// index.js的内容
const redux = require('redux')
// redux有三大块:store、action、reducer

const initState = {
    count: 0
}

// 3、reduce 是去连接store和action的
const reducer = (state=initState, action) => {
    switch(action.type) {
        case 'INCREMENT': 
            return {...state, count: state.count + 1}
        // 如果没有匹配到任何的action就直接返回state
        default:
            return state
    }
}

// 1、store 保存状态,创建一个store对象即可
const store = redux.createStore(reducer)


// 2、action 是用来修改store的
const action = { type: 'INCREMENT' }

// 5、在派发action之前可以订阅store的修改,监听store的变化
store.subscribe(() => {
    console.log('store被修改了')
})

// 4、派发action
store.dispatch(action)

这个时候我们去用node运行一下index.js会打印出'store被修改了'
如果我们想要获取对应的状态,我们可以在subscribe中获取

store.subscribe(() => {
    // console.log('store被修改了')
    console.log(`count: ${store.getState().count}`) // count: 1
})

纯函数的概念

reducer就是一个纯函数,我们是不需要直接修改state的,我们不是直接拿count进行修改的。那这里我们来看一下什么是纯函数。

简单来说纯函数有如下特点:
1、函数的返回结果只依赖于它的参数
2、函数在执行的过程中是没有副作用

比如下面例子 判断是不是纯函数:

const a = 10
const fn = (b) => a + b
console.log(fn(3))

fn的返回结果取决于a和b的值,所以它不是纯函数!下面改写为纯函数

const a = 10
const fn = (x, y) => x + y // 函数的返回结果只依赖于它的参数
console.log(fn(1, 3))

再来看一个例子:

const fnfn = (obj, b) => {
    obj.x = 3
    return obj.x + b
}
const obj1 = {x: 1}
console.log(fnfn(obj1, 3))
console.log(obj1.x)

这个fnfn函数也不是纯函数!因为它有副作用,倒数第三行我们定义obj.x为1,但是最后一行打印出来为3,因为fnfn函数对obj.x的值进行了了修改。故它不是纯函数,下面进行纯函数的改写:

const fnfn = (obj, b) => {
    return obj.x + b
}
const obj1 = {x: 1}
console.log(fnfn(obj1, 3))
console.log(obj1.x)

总结

使用Redux的五步骤为:

  1. 创建一个对象,作为状态state
  2. 创建Store存储state
  3. 通过action来修改state
  4. 修改reducer中的处理代码
  5. 可以在派发action之前,监听store的变化

本篇文章介绍了Redux使用的基础方法,后面会继续介绍Redux在项目中的使用以及它的其它特性

相关文章
|
4月前
|
JavaScript API 开发者
vue自定义Hooks函数使用和封装思想
【8月更文挑战第8天】vue自定义Hooks函数使用和封装思想
166 1
|
4月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
4月前
|
JavaScript 开发者
|
7月前
|
前端开发 JavaScript 开发者
React的函数组件与类组件:探索两者之间的区别
【4月更文挑战第25天】React提供函数组件和类组件,两者在语法、状态管理、生命周期和性能优化上有所不同。函数组件简单且易于理解,使用 Hooks 可添加状态管理;类组件支持复杂状态管理和生命周期方法,适用于需要精细控制更新的场景。随着 Hooks 的发展,函数组件功能增强,成为更多开发者的首选。选择组件类型应根据实际需求权衡。
|
7月前
|
缓存 监控 Java
Hysterix的概念、作用、使用方法
Hysterix的概念、作用、使用方法
67 0
|
前端开发
React中的类组件和函数组件之间有什么区别?
相同点 1、组件名首字母必须大写 2、返回的组件只能有一个根元素 3、都不能修改props
|
7月前
|
Web App开发 存储 前端开发
第五章 在React中如何定义组件
第五章 在React中如何定义组件
120 0
|
前端开发
react学习案例9-高阶组件的概念1
react学习案例9-高阶组件的概念1
75 0
react学习案例9-高阶组件的概念1
|
前端开发
react实战笔记32:定义练习得结构1
react实战笔记32:定义练习得结构1
103 0
react实战笔记32:定义练习得结构1