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在项目中的使用以及它的其它特性

相关文章
|
3月前
|
JavaScript 开发者
|
3月前
|
前端开发 JavaScript 开发者
React组件入门秘籍:函数组件、类组件、高阶组件,一文让你彻底解锁!
【8月更文挑战第24天】React是一款广受好评的JavaScript库,其核心特色在于组件化开发模式。React组件作为应用程序的基础单元,不仅能够处理特定业务逻辑还能实现界面展示。本文深入浅出地介绍了React组件的概念、创建方式及其应用场景。
55 0
|
3月前
|
监控 JavaScript API
Vue3 高阶方法及使用场景,看这一篇就够啦!!【最全】
Vue3 高阶方法及使用场景,看这一篇就够啦!!【最全】
|
6月前
|
缓存 监控 Java
Hysterix的概念、作用、使用方法
Hysterix的概念、作用、使用方法
56 0
|
6月前
|
Web App开发 存储 前端开发
第五章 在React中如何定义组件
第五章 在React中如何定义组件
112 0
|
6月前
|
前端开发 JavaScript
第十二章 引出React中的生命周期
第十二章 引出React中的生命周期
|
前端开发
react学习案例9-高阶组件的概念1
react学习案例9-高阶组件的概念1
73 0
react学习案例9-高阶组件的概念1
|
前端开发
react实战笔记32:定义练习得结构1
react实战笔记32:定义练习得结构1
101 0
react实战笔记32:定义练习得结构1