redux的使用

redux是跟vue中的vuex和pinia类似的一个状态管理库,可以跟任一一个框架进行结合,包括vue、react以及angular。不过在与redux结合这一方面,显然react要做的更好。接下来我会详细介绍在不结合react时,redux是怎么使用的,我们用到的环境是nodeJS环境,因此我们需要用到CommonJS规范。

redux最核心的三个部分包括storeactionreducerstore 就是redux中最核心的类似于CPU的东西,一切的行为都有store发起。action ,见名知意就是行为的意思,在redux中action就是一个普通的对象({type: 'xxx', payload: 'xxx'}),type这个属性表示此次action的含义,payload就是此次行为所携带的数据。reducer 是数据中心(一个普通的函数),action携带的数据统一在reducer这里进行处理,所有的数据在reducer这里有一个统一的名称:**state,然后reducer是一个 纯函数(简而言之就是确定的输入有确定的输出)。**下面就开始介绍redux的使用。

首先我们需要安装相关的依赖,这里用的包管理器是pnpm,在安装依赖之前,我们先使用pnpm init这个命令生成package.json文件,然后就可以安装依赖(pnpm add redux)了。安装完依赖之后,我们就可以正式开始redux的使用了。

首先我们需要引入store,我们用到的是redux这个库中createStore这个函数,目前这个函数已经废弃了,因为有更好的工具可以代替,但是核心还是不变的,所以理解了这一流程之后,用其他的api也是一样的。

javascript 复制代码
const { createStore } = require('redux')

const store = createStore()

module.exports = store
perl 复制代码
createStore这个函数接收一个reducer,以下代码就是reducer,只是一个普通的函数,这个函数接收两个参数,state表示数据,payload表示action所携带的普通对象,在reducer中我们根据不同的action中携带的type不一样,来对state进行处理,由于reducer是一个纯函数,因此我们不能直接修改state中的数据(比如 state.name = 'xxx')
javascript 复制代码
// 初始化数据
const initialState = {
  name: 'coder',
  age: 20,
  count: 100
}

/**
 * 
 * @param {*} state store中目前保存的state
 * @param {*} payload 本次需要更新的action(dispatch传入的action)
 * @returns 作为store之后存储的state
 */
const reducer = (state = initialState, payload) => {
  const { type } = payload
  switch(type) {
    case CHANGE_COUNT: {
      return { ...state, count: state.count + payload.count}
    }
    default:
      return state
  }
}
module.exports = reducer

写了store和reducer之后,就是行为的发起了,这也是我们使用redux的守门员,想要获取reudx中的数据,我们首先需要store派发一个action,然后才能进行下面一系列的操作。

javascript 复制代码
const countAction = {
  type: 'change_count',
  count: 110
}

以上就是一个改变数字的action,但是由于我们可能会发起多个action,因此我们可以将其改造成一个函数,然后在发起的时候去调用。

javascript 复制代码
const addCountAction = (num) => ({
  type: CHANGE_COUNT,
  count: num
})

module.exports = {
  addCountAction
}

以上准备工作都做完之后,我们就可以正式来使用redux了。我们需要使用时,只需要引入store,并发起action就可以了。

javascript 复制代码
const store = require('./store')
const { addCountAction } = require('./actionCreators')
store.dispatch(addCountAction(10))

写完以上代码,我们就可以使用store的getState()这个方法查看更新后的保存在reducer的数据了,但是由于我们并不能每一次调用dispatch都去调用一次getState()这个方法,因此,我们可以对行为的派发进行订阅,这样每一次行为的派发,都会监听到。

javascript 复制代码
store.subscribe(() => {
  console.log(store.getState())
})

以上就是redux的基本使用。每一个概念(store、action、reducer)都可以单独写一个文件,比如所有action可以写在actionCreators.js这个文件里。

相关推荐
知识分享小能手18 小时前
React学习教程,从入门到精通,React AJAX 语法知识点与案例详解(18)
前端·javascript·vue.js·学习·react.js·ajax·vue3
NeverSettle_1 天前
React工程实践面试题深度分析2025
javascript·react.js
学前端搞口饭吃1 天前
react reducx的使用
前端·react.js·前端框架
努力往上爬de蜗牛1 天前
react3面试题
javascript·react.js·面试
开心不就得了1 天前
React 进阶
前端·javascript·react.js
谢尔登1 天前
【React】React 哲学
前端·react.js·前端框架
学前端搞口饭吃1 天前
react context如何使用
前端·javascript·react.js
GDAL1 天前
为什么Cesium不使用vue或者react,而是 保留 Knockout
前端·vue.js·react.js
Dragon Wu1 天前
React state在setInterval里未获取最新值的问题
前端·javascript·react.js·前端框架
YU大宗师1 天前
React面试题
前端·javascript·react.js