位置: 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(气温和降水空间变化一月平均气温规律是什么原因是什么)

  • 支付宝壁纸在哪里找(支付宝主页背景图)

    支付宝壁纸在哪里找(支付宝主页背景图)

  • 复制和粘贴快捷键ctrl加什么(复制和粘贴快捷键用不了)

    复制和粘贴快捷键ctrl加什么(复制和粘贴快捷键用不了)

  • 苹果11屏幕黑白怎么调回来(苹果11屏幕黑白屏)

    苹果11屏幕黑白怎么调回来(苹果11屏幕黑白屏)

  • 淘宝删除好评的方法(淘宝删除好评的商品)

    淘宝删除好评的方法(淘宝删除好评的商品)

  • 微信etc扣款设置(微信etc扣款设置在哪里)

    微信etc扣款设置(微信etc扣款设置在哪里)

  • 苹果app充值不了(苹果app充值不了游戏)

    苹果app充值不了(苹果app充值不了游戏)

  • 进网试用是什么意思(进网试用是什么意男)

    进网试用是什么意思(进网试用是什么意男)

  • 京东发货途中能退货吗(京东快递发货了可以中途退回吗)

    京东发货途中能退货吗(京东快递发货了可以中途退回吗)

  • 苹果手机为什么拍不了照片(苹果手机为什么wifi打不开)

    苹果手机为什么拍不了照片(苹果手机为什么wifi打不开)

  • 电脑进水黑屏电源还亮(电脑进水黑屏电源灯闪烁)

    电脑进水黑屏电源还亮(电脑进水黑屏电源灯闪烁)

  • 苹果11pro max没有手写功能吗?(苹果11promax没有128g内存吗)

    苹果11pro max没有手写功能吗?(苹果11promax没有128g内存吗)

  • 手机扬声器和听筒的区别(手机扬声器和听筒坏了怎么办)

    手机扬声器和听筒的区别(手机扬声器和听筒坏了怎么办)

  • 光盘属于辅助存储器吗(光盘属于外存储器,也属于辅助存储器?)

    光盘属于辅助存储器吗(光盘属于外存储器,也属于辅助存储器?)

  • 主页地址是什么意思(主页地址是什么意思?qq邮箱的网址那么长都填吗?)

    主页地址是什么意思(主页地址是什么意思?qq邮箱的网址那么长都填吗?)

  • gpt转mbr数据会丢失吗(gpt 转mbr)

    gpt转mbr数据会丢失吗(gpt 转mbr)

  • 小米路由器重置管理员密码(小米路由器重置按钮在哪)

    小米路由器重置管理员密码(小米路由器重置按钮在哪)

  • word文档添加表格行数(word文档添加表格打字显示框框)

    word文档添加表格行数(word文档添加表格打字显示框框)

  • 哔哩哔哩手机下载的视频在哪里

    哔哩哔哩手机下载的视频在哪里

  • 手机简体中文怎么设置(手机简体中文怎么设置vivo)

    手机简体中文怎么设置(手机简体中文怎么设置vivo)

  • 蓝牙耳机怎么调双耳模式(蓝牙耳机怎么调节音量大小)

    蓝牙耳机怎么调双耳模式(蓝牙耳机怎么调节音量大小)

  • 快手怎么设置成上下(快手怎么设置成抖音的浏览模式)

    快手怎么设置成上下(快手怎么设置成抖音的浏览模式)

  • 软盘驱动器是什么设备(软盘驱动器是什么存储器)

    软盘驱动器是什么设备(软盘驱动器是什么存储器)

  • hp是什么电脑(hp是什么电脑的简称)

    hp是什么电脑(hp是什么电脑的简称)

  • nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver 原因及避坑解决方案(nvidia-smi failed to initialize)

    nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver 原因及避坑解决方案(nvidia-smi failed to initialize)

  • 外贸企业申报退税流程
  • 计提房产税要含税吗
  • 企业利息收入需要交哪些税
  • 移动平均加权法是什么意思
  • 政府工会经费收入如何做凭证
  • 个体户可以开多个银行账户吗
  • 文化传媒公司开票税点
  • 母公司投资子公司现金流量表抵消
  • 原会计收入准则最新
  • 专项应付款如何核算
  • 住宿费发票开错了可以重新开吗
  • 公务费用扣除标准 通讯补贴怎么算
  • 企业开票代码是什么意思
  • 统借统还定义
  • 应付职工薪酬计入现金流量表哪里
  • 进口车辆购置税公式
  • 不用开票的收入有哪些
  • 差旅费进项可以跨月抵扣吗
  • 计提工资当月要结转吗?
  • 以前年度应扣未扣支出
  • 房地产企业卖出去的房子需要缴纳城镇土地使用税吗
  • 华为手机找回删除的通讯录号码
  • 弥补亏损企业类型都是一般企业吗
  • PHP:Memcached::decrementByKey()的用法_Memcached类
  • 八个与cpu相关的字符
  • php数组函数有哪些
  • 会计分录的方法与步骤
  • 药品生产企业应建立
  • 出口货物退免税证明办税进度
  • 威斯康星州1976
  • node 卸载
  • 青龙面板库怎么用
  • php parse_str() 函数的定义和用法
  • YOLOv8(n/s/m/l/x)&YOLOv7(yolov7-tiny/yolov7/yolov7x)&YOLOv5(n/s/m/l/x)不同模型参数/性能对比(含训练及推理速度)
  • 大头小尾发票是什么意思
  • ps橡皮擦怎么擦的跟背景色一样
  • 公司先垫付社保会计分录
  • python元数据
  • u8已经记账的凭证怎么修改
  • 企业间借款利息收入
  • mysql和sqlserver的sql语句一样吗
  • mongodb如何查询数据
  • linux安装ms
  • 招标押金有规定吗
  • 公司代缴社保如何查询
  • 未收到货款发票是什么意思
  • 长期股权投资稀释股权
  • 进项税可以跨年结转吗
  • 所得税汇算清缴前取得跨年发票
  • 融资手续费计入什么成本
  • 非限定性净资产属于什么科目
  • 应付职工社会保险费计入什么科目
  • 公司购买电视属于什么费用
  • 纳税人财务会计制度
  • 买别人的银行卡是啥罪
  • 财务费用怎么计入现金流量表
  • 产品利润率如何计算
  • 企业应该设置几个安全管理人员
  • mysql分区分表原理
  • sql server 不存在或者拒绝访问
  • solaris11下载
  • Windows Server 2016第三技术预览版新特性详解:容器是亮点
  • 如何禁用windows defender service
  • mac os x 10.12.2 Beta1怎么升级?macOS Sierra 10.12.2 Beta升级图文教程
  • linux系统中的脚本文件一般以什么开头
  • linux i
  • linux中的挂载命令
  • ssonsvr.exe - ssonsvr是什么进程
  • win7win8.1win10哪个好
  • centos dvd安装
  • 64位的win10更新安装补丁KB3105213失败总是重复安装该怎么办?
  • win10怎么清理系统垃圾
  • [置顶]bilinovel
  • Javascript WebSocket使用实例介绍(简明入门教程)
  • node搭建项目
  • 河南个人社保查询登录入口官网
  • 税务局登记是什么
  • 个体户定额纳税
  • 进口小麦关税税率是多少
  • 个税系统崩溃
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设