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

前言

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

猜你喜欢

转载自blog.csdn.net/weixin_45745641/article/details/123945612
今日推荐