redux

安装redux

npm i redux   本人比较喜欢使用npm 各位也可以使用yarn add redux

核心概念

store , action , reducer

  • store: 仓库 , 存储了数据 , 管理者 , 管理 action 和 reducer
  • action: 动作, Action 描述发生的事情 . 每一个动作都可以是一个action , 比如登录 , 退出 , 添加任务等 . 改变数据唯一方式就是通过action
  • reducer: Store 收到Action以后 , 不是自己处理 , 而是派发 dispatch 给reducer进行处理.reducer处理完成之后返回新的状态

Store

store就是保存数据的地方 , 你可以把它看成一个容器或者仓库 , 整个应用只能有一个store

  • Redux提供 createStore 这个函数 , 用来生成 Store

为了方便维护 在src下新建一个reducer文件夹=>index.js 写入如下代码

function reducer(){}
export default reducer

 在index.js中

import reducer from './reducer'
import { createStore } from 'redux'
// 创建store , 必须指定reducer
const store = createStore(reducer)
  • 通过 store.getState() 可以获取数据

action

action是一个对象. 其中的 type 属性是必须的 , 表示Action的名称 , 其余属性可以自行设置

action描述的是需要做的事情和携带的数据

在src下创建一个actions文件夹=> index.js

// action 就是一个一个的js对象
// action 必须有type属性 , 建议type属性的值纯大写
// action 还可以有额外的其他属性
// action的作用: 描述要做的事情 , 以及需要的数据
export const addUser = {
  type: 'ADD_USER',
  username: '张三'

}

export const add = {
  type: 'ADD',

}

action creator

有多少动作 , 就会有多少个action , 比如添加张三用户 , 添加李四用户 ,删除不同的id任务, 这样一个一个提供action会非常麻烦 , 

定义一个函数来生成Action ,  这个函数就叫 Action Creator

action creator的作用:用于生成action

// export function addUser(username) {
//   return {
//     type: 'ADD_USER',
//     username
//   }
// }

// 可以简写为
export const addUser = (username) => ({
  type: 'ADD_USER',
  username
})

reducer

reducer就是一个函数 , 它接收 Action 和当前 State 作为参数 , 返回一个新的State

整个应用的初始状态, 可以作为state的初始值

function reducer(state = 0, action) {
  // 处理action
  return state
}
export default reducer

dispatch 派发 action

通过 store.dispatch(action) 可以派发任务 , 把action交给reducer处理

各文件的代码

store文件夹=> actions.js


export const add = () => {
  return {
    type: 'ADD'
  }
}

export const ww = xw => {
  return {
    type: 'XW',
    xw
  }
}

store文件夹=>reducer.js

function reducer(state = 0, action) {
  // 处理action
  if (action.type === 'ADD') {
    return state + 1
  }
  if (action.type === 'XW') {
    return state = '小吴是帅比'
  }
  return state
}
export default reducer

其实应该新建一个store文件夹=>index.js

import { createStore } from 'redux'
import { add, ww } from '../actions'
import reducer from '../reducer'
const store = createStore(reducer)

// 创建store , 必须指定reducer
console.log('store', store);
// 获取状态 store.getState = 0
console.log('获取状态', store.getState());

// store派发执行任务
store.dispatch(add())

// 获取状态 store.getState = 1
console.log(store.getState());

// 带参数的派发任务
store.dispatch(ww('小吴是帅比'))
console.log(store.getState());

export default store

在index.js文件中 

import store from './store'
store.getState()

react-redux

npm i redux react-redux  

redux v4.2

store.ts

// redux v4.2 createStore 弃用
import { legacy_createStore as createStore } from "redux"
import { Reducer } from "./reducer"
export const store = createStore(Reducer)

reducer.ts

export const Reducer = (
  state = { value: 0 },
  action: { type: string; payload: number }
) => {
  switch (action.type) {
    case "increment":
      return { value: state.value + action.payload }
    case "counter/decremented":
      return { value: state.value - 1 }
    default:
      return state
  }
}

获取数据

import { useSelector } from "react-redux"
  const count = useSelector((state) => state)
  console.log(count) // { value : 0 }

action.ts

修改数据方法

// 增加 value
export const increment = (payload: number) => ({ type: "increment", payload })

调用方法

import { useSelector, useDispatch } from "react-redux"
  const dispath = useDispatch()
  <Button onClick={() => dispath(increment(2))}>增加</Button>  // value : 2

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Redux是一个用于在React应用中管理状态的库。它结合了React和Redux,提供了一种可预测的状态管理解决方案。在React Redux中,我们使用Provider组件将Reduxstore传递给整个应用程序,以便在应用程序的任何地方都可以访问到Redux的状态。\[1\]\[3\] 在React Redux中,我们可以使用connect函数将组件连接到Reduxstore,并将store中的状态映射到组件的props上。这样,组件就可以通过props访问和更新Redux的状态。同时,我们还可以使用dispatch函数来触发Redux中的action,从而更新状态。\[2\] 通过React Redux,我们可以更方便地管理React应用的状态,使得应用的状态变化更加可控和可预测。同时,React Redux还提供了一些中间件,如Redux-thunk,可以帮助我们处理异步操作,使得应用的状态管理更加灵活和强大。\[2\] 总之,React Redux是一个强大的状态管理库,可以帮助我们更好地管理React应用的状态,并提供了一些工具和中间件来简化状态管理的过程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [React中的Redux](https://blog.csdn.net/yrqlyq/article/details/119118182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值