位置: IT常识 - 正文

React(六) —— redux(react+)

编辑:rootadmin
React(六) —— redux

推荐整理分享React(六) —— redux(react+),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react+,react reducer详解,react+,react reduct,react+,react reduct,react reducer,react+,内容如对您有帮助,希望把文章链接给更多的朋友!

🧁个人主页:个人主页

✌支持我 :点赞👍收藏🌼关注🧡

文章目录⛳Redux🍆redux定义💐redux使用原则🍰redux使用场景🧊redux工作流程🥫redux基本创建store定义改变数据的actions,并在renducer函数中对对应的action作出不同的操作离开或到达Detail页面,触发相应的actions订阅store,更新状态到页面上🍸补充(actioncreator)🍫redux核心reducer合并redux中间件redux-thunkredux-promise⛳Redux

redux最主要是用作应用状态的管理。简言之,Redux用一个单独的常量状态树(state对象)保存这一整个应用的状态,这个对象不能直接被改变。当一些数据变化了,一个新的对象就会被创建(使用actions和reducers)这样就可以进行数据追踪。

🍆redux定义

Redux 是一个使用叫做“action”的事件来管理和更新应用状态的模式和工具库。它以集中式Store(centralized store)的方式对整个应用中使用的状态进行集中管理,其规则确保状态只能以可预测的方式更新。

💐redux使用原则

🔎🔎🔎

state以单一对象存储在store对象中state只读(每次都返回一个新的对象)使用纯函数reducer执行state更新

🍰redux使用场景

🏸🏸🏸

同一个state需要在多个Component中共享需要操作一些全局性的常驻Component,如Tooltips等太多props需要在组件树中传递,其中大部分只是为了传给子组件业务太复杂导致Component文件太大,可以考虑将业务逻辑拆出来放到Reducer中🧊redux工作流程

📢📢📢

组件通过dispatch方法触发Action(type+payload载荷)Store接收Action并将Action分发给ReducerReducer根据Action类型对状态进行更改并将更改后的状态返回给Store组件订阅了Store中的状态,Store中的状态更新会同步到组件🥫redux基本创建store

redux文件夹下的store.js

//1.引入redux,//2.createStore(reducer)import {createStore} from 'redux'const reducer = (preState,action)=>{ return prevState}const store = createStore(reducer);export default store定义改变数据的actions,并在renducer函数中对对应的action作出不同的操作//store.js 第二个参数为操作的actionsconst reducer = (prevState={ show:true, //...初始状态值},action)=>{ console.log(action); let newStare = {...prevState} switch(action.type){ case 'hide-tabbar': newStare.show = false console.log(newStare.show); return newStare.show case 'show-tabbar': newStare.show = true console.log(newStare.show); return newStare.show default: return prevState }}离开或到达Detail页面,触发相应的actions//Detail.jsimport {show,hide} from '../../redux/actionCreator/TabbarActionCreator'useEffect(()=>{ //store.dispatch 通知 store.dispatch(hide()) return()=>{ // console.log('destroy'); store.dispatch(show()) } },[]).............................................//actionCreator文件夹下TabbarActionCreator.jsfunction hide(){ return { type:'hide-tabbar' }}function show(){ return { type:'show-tabbar',//必须有type值 //payload:'需要传的值' }}export {show,hide}订阅store,更新状态到页面上//App.js中state = { isShow:store.getState() } //store.subcribe 订阅 componentDidMount(){ store.subscribe(()=>{ console.log('app中订阅',store.getState()); this.setState({ isShow:store.getState().show }) }) } //store.subcreibe 订阅 render() { return ( <div> <MRouter> {this.state.isShow && <Tabbar></Tabbar>} </MRouter> </div> )}

获得store中的状态,根据状态的不同来控制Tabbar的显示或隐藏

🍸补充(actioncreator)

action creator是一个函数,用于生成一个action对象,他接受一个或多个参数(任何类型的数据),但是必须在action对象中有一个type属性:描述操作的类型。action creator函数返回一个对象,该对象是一个action,这个action对象包含了描述操作的数据

function addTodo(text){return{type:'add_todo'}}..............................store.dispatch(addTodo())

上述:addTodo是一个action creator函数,它接受一个text参数并返回一个包含type和text属性的action对象。在Redux中,我们可以使用dispatch函数将这个action对象发送到store中,以便更新store状态。

🍫redux核心

getState:获取状态

store.getState()

subscribe:订阅状态

store.subscribe(()=>{})React(六) —— redux(react+)

dispatch:触发Action

store.dispatch({type:'description...'})reducer合并

🚀如果不同的action所处理的属性之间没有联系,我们可以把Reducer函数拆分。不同的函数负责处理不同属性,最终把他们合并成一个大的Reducer,并且抛出在store内的文件中引入。

redux文件夹下CityReducer.js

创建多个reducer,分别管理不同的数据

const CityReducer = (prevState={ cityName:'北京'},action)=>{ let newStare = {...prevState} switch(action.type){ case 'change-city': newStare.cityName = action.payload return newStare default: return prevState }}export default CityReducer

store.js

使用combinReducers方法合并多个Reducer。combinReducers方法可以吧多个reducer合并成一个reducer,以便在创建store实例时使用

import {combineReducers, createStore} from 'redux'import CityReducer from './reducers/CityReducer';import TabbarReducer from './reducers/TabbarReducer';const reducer = combineReducers({ CityReducer, TabbarReducer})const store = createStore(reducer);export default storeredux中间件

在redux里,action仅仅是携带了数据的普通js对象,action creator返回的值是这个action类型的对象,然后通过store.dispatch()进行分发。同步的情况下一切都很完美,但是reducer无法处理异步的情况。

那么我们就需要action和reducer中间架起一座桥梁来处理异步。这就是middleware

redux-thunk

作用

🚒让我们的action创建函数不仅仅返回一个action对象,也可以返回一个函数,这个函数会接受dispatch和getState两个参数,我们可以在函数内部进行 异步操作 ,然后再通过dispatch发出一个新的action对象,来更新应用的状态

安装redux-thunk

npm i --save react-thunk

引入

import {applyMiddleware, combineReducers, createStore} from 'redux'import reactThunk from 'redux-thunk'const reducer = combineReducers({ .....})const store = createStore(reducer,applyMiddleware(reactThunk));export default store

使用方法

import getCinemsListAction from '../redux/actionCreator/getCinemsListAction'store.dispatch(getCinemsListAction())...............................import axios from "axios"function getCinemasListAction(){ return(dispatch)=>{ axios({ ........ }).then(res=>{ console.log(res.data.data.cinemas); dispatch({ type:'change-list', payload:res.data.data.cinemas }) }) }}export default getCinemasListAction

注意:

当我们使用react-thunk中间件时,他会判断action是否为函数,如果是函数就执行这个函数,并在函数内部发出一个新的action对象,若不是则按照正常进行

取消订阅

//订阅 var unsubcribe=store.subscribe(()=>{ }) return ()=>{ //取消订阅 unsubcribe() } },[])redux-promise

安装redux-promise

npm i redux-promise

引入

import {applyMiddleware, combineReducers, createStore} from 'redux'import reactThunk from 'redux-thunk'import reactPromise from 'redux-promise'const reducer = combineReducers({ ....})const store = createStore(reducer,applyMiddleware(reactThunk,reactPromise));export default store

使用方法

import getCinemsListAction from '../redux/actionCreator/getCinemsListAction'store.dispatch(getCinemsListAction())...............................import axios from "axios"async function getCinemasListAction(){ var list = await axios({ ...... }).then(res=>{ return{ type:'change-list', payload://res.data.data.cinemas } }) return list }export default getCinemasListAction
本文链接地址:https://www.jiuchutong.com/zhishi/299971.html 转载请保留说明!

上一篇:【Vue路由(router)进一步详解】(路由vue-router)

下一篇:气温和降水空间栅格数据下载RS123(气温和降水空间变化一月平均气温规律是什么原因是什么)

  • win11怎么打开任务管理器(Win11怎么打开任务管理器快捷键)

    win11怎么打开任务管理器(Win11怎么打开任务管理器快捷键)

  • vivo x27怎么看运行内存(vivo怎么查看运存)

    vivo x27怎么看运行内存(vivo怎么查看运存)

  • 华为p40外壳是什么材质(华为p40pro外壳是什么材质)

    华为p40外壳是什么材质(华为p40pro外壳是什么材质)

  • 苹果手机如何设置人脸识别解锁(苹果手机如何设置手写键盘)

    苹果手机如何设置人脸识别解锁(苹果手机如何设置手写键盘)

  • 微信点赞不让共同好友看到(微信点赞不让共同好友看到华为)

    微信点赞不让共同好友看到(微信点赞不让共同好友看到华为)

  • 爱思助手会损害手机吗(爱思助手会不会对手机有影响)

    爱思助手会损害手机吗(爱思助手会不会对手机有影响)

  • 美颜相机视频只能录一分钟(美颜相机拍的视频为什么没有声音)

    美颜相机视频只能录一分钟(美颜相机拍的视频为什么没有声音)

  • 抖音极速和抖音短视频区别(抖音极速和抖音火山有什么区别)

    抖音极速和抖音短视频区别(抖音极速和抖音火山有什么区别)

  • 街电可以任意地方还吗(街电任何地方都可以还吗)

    街电可以任意地方还吗(街电任何地方都可以还吗)

  • 拼多多已发货怎么拒收(拼多多已发货怎么重新打印面单)

    拼多多已发货怎么拒收(拼多多已发货怎么重新打印面单)

  • ivvi p60用的什么处理器(ivvi p60-x12)

    ivvi p60用的什么处理器(ivvi p60-x12)

  • 华为手机微信图标找不到了怎么办(华为手机微信图片过期怎么恢复)

    华为手机微信图标找不到了怎么办(华为手机微信图片过期怎么恢复)

  • 光猫复位是什么意思(光猫复位键是干什么的)

    光猫复位是什么意思(光猫复位键是干什么的)

  • 抖音播放量总是500要怎么办(抖音播放量总是100多)

    抖音播放量总是500要怎么办(抖音播放量总是100多)

  • vivo手机otg怎么下歌(vivo手机oTG怎么打开)

    vivo手机otg怎么下歌(vivo手机oTG怎么打开)

  • 华为超广角功能怎么开启(华为超广角功能怎么开)

    华为超广角功能怎么开启(华为超广角功能怎么开)

  • 快手怎么查看直播人数(快手怎么查看直播间中奖记录)

    快手怎么查看直播人数(快手怎么查看直播间中奖记录)

  • oppor17对比vivox23(oppor17对比vivoy50)

    oppor17对比vivox23(oppor17对比vivoy50)

  • x86采用的是哈佛结构吗(x86采用的是什么结构)

    x86采用的是哈佛结构吗(x86采用的是什么结构)

  • bizimg是什么文件夹可以删除吗(bib是什么文件格式)

    bizimg是什么文件夹可以删除吗(bib是什么文件格式)

  • 爱奇艺怎么截取视频(爱奇艺怎么截取台词)

    爱奇艺怎么截取视频(爱奇艺怎么截取台词)

  • oppoa5像素多少万(vivox90pro像素多少万)

    oppoa5像素多少万(vivox90pro像素多少万)

  • 小米9快传在哪里打开(小米手机小米快传怎么打开)

    小米9快传在哪里打开(小米手机小米快传怎么打开)

  • 抖音蓝v用户好处(抖音蓝v好不好)

    抖音蓝v用户好处(抖音蓝v好不好)

  • Nuxt3从零开始配置与打包发布(nuxt支持vue3吗)

    Nuxt3从零开始配置与打包发布(nuxt支持vue3吗)

  • 进项税额转出会计分录月末如何结转
  • 申请退还增量留抵税额的条件包括
  • 小规模纳税人出租
  • 教育培训行业是干什么的
  • 销项税额是开票金额么
  • 2020年小规模纳税人增值税起征点
  • 投资收益收到的现金小于投资收益
  • 当月发票作废需要收回么
  • 如何做现金支票凭证
  • 收到捐赠货物的会计分录怎么写
  • 存款利率怎么算存一年后的金额
  • 结算本月应付职工薪酬,其中生产工人工资为18000
  • 收到的抵债资产属不属于所有者权益
  • 从境外取得的佣金
  • 工资报税怎么报的原则
  • 可以对开发票吗
  • 最新土地增值税筹划
  • 董事会费汇算清缴计入什么科目
  • 垫付的医药费怎么理赔
  • 进项发票已入账抵扣后开负数红冲怎么处理
  • 购车保险属于什么费用
  • 怎么查银行账户余额
  • 户外拓展费用入什么科目
  • 预提费用新会计准则叫什么科目
  • 金融企业贷款损失准备金税务管理
  • 公司回购股份有什么好处
  • 修改hosts文件的软件
  • 新购固定资产账务处理
  • 以公允价值计量是什么意思
  • dat文件转换成wps表格
  • 注销后怎么补缴社保
  • 企业销售折扣在计征所得税时如何处理
  • php模板引擎语法
  • vue的路由守卫有哪些钩子函数
  • 百分之十三增值税发票能抵扣多少?
  • sum(sumif)
  • code .命令
  • 普通发票还要交增值税吗
  • 逐帧flash动画
  • 其他应收款如何计提减值准备
  • 现金流量表现金等价物有哪些
  • 外贸退税是算利率吗
  • 没有实收资本的股权原值
  • 纳税人具有怎样的特征?
  • 股东收到投资收益会计科目
  • 应付账款的入账时间为
  • 增值税发票跨月可以作废吗
  • 小规模纳税人采购需要发票吗
  • 原材料用于在建工程
  • 支付国外客户佣金违法吗
  • 材料采购的流程
  • 商业养老保险有风险吗
  • 员工工资怎么核算
  • 营改增对企业税负影响
  • 跨年度利息收入如何调整
  • 基于Sql Server通用分页存储过程的解决方法
  • mysql varchar类型
  • mysql sqlserver语法
  • MySQL中实现插入或更新操作(类似Oracle的merge语句)
  • 怎样从sql数据库取数据
  • aspnet开发和运行环境
  • win8激活点不进去
  • os x yosemite dp5下载地址 os x 10.10 dp5更新内容
  • linux sed-i
  • windowsxp怎么装windows7
  • win7网络不能用怎么办
  • win10出现恢复界面0xc000000f
  • JavaScript中的变量名不区分大小写
  • 飞行歌曲
  • html截取字符串
  • unity3d怎么做游戏
  • 获取nodejs命令行信息
  • javascript中window.event事件用法详解
  • javascript学习指南
  • js基本代码
  • 企业安置几级残疾人
  • 中山大学税务硕士
  • 国税总局河南省税务局官网
  • 交通运输业包含哪些
  • 中俄改订条约收回哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设