react学习—Reducer Hook
Reducer Hook
- 一、Reducer Hook
一、Reducer Hook
Flux:Facebook出品的一个数据流框架
- 规定了数据是单向流动的
- 数据存储在数据仓库中(目前,可以认为state就是一个存储数据的仓库)
- action是改变数据的唯一原因(本质上就是一个对象,action有两个属性)
- type:字符串,动作的类型
- payload:任意类型,动作发生后的附加信息
- 例如,如果是添加一个学生,action可以描述为:
{ type:"addStudent", payload: {学生对象的各种信息} }
- 例如,如果要删除一个学生,action可以描述为:
{ type:"deleteStudent", payload: 学生id }
- 具体改变数据的是一个函数,该函数叫做reducer
- 该函数接收两个参数
- state:表示当前数据仓库中的数据
- action:描述了如何去改变数据,以及改变数据的一些附加信息
- 该函数必须有一个返回结果,用于表示数据仓库变化之后的数据
- Flux要求,对象是不可变的,如果返回对象,必须创建新的对象
- reducer必须是纯函数,不能有任何副作用
- 该函数接收两个参数
- 如果要触发reducer,不可以直接调用,而是应该调用一个辅助函数dispatch
- 该函数仅接收一个参数:action
- 该函数会间接去调用reducer,以达到改变数据的目的
//useReducer
import { useState } from "react"
/*** 通用的useReducer函数* @param {function} reducer reducer函数,标准格式* @param {any} initialState 初始状态* @param {function} initFunc 用于计算初始值的函数*/
export default function useReducer(reducer, initialState, initFunc) {const [state, setState] = useState(initFunc? initFunc(initialState): initialState)function dispatch(action) {const newState = reducer(state, action)console.log(`日志:n的值 ${state}->${newState}`)setState(newState);}return [state, dispatch];
}
//App
import React from 'react'
import useReducer from './Hooks/useReducer';
function reducer(state,action) {switch(action.type){case "increase":return state+1;case "decrease":if(state === 0){return 0}return state - 1default:return state;}
}
export default function App() {const [n,dispatch] = useReducer(reducer, 10,()=>{return 100})return (<div><button onClick={()=>{dispatch({type: "decrease"})}}>-</button><span>{n}</span><button onClick={()=>{dispatch({type: "increase"})}}>+</button></div>)
}
当然,react已经给我们实现,我们可以直接使用
import React,{useReducer} from 'react'function reducer(state,action) {switch(action.type){case "increase":return state+1;case "decrease":if(state === 0){return 0}return state - 1default:return state;}
}
export default function App() {const [n,dispatch] = useReducer(reducer, 10)return (<div><button onClick={()=>{dispatch({type: "decrease"})}}>-</button><span>{n}</span><button onClick={()=>{dispatch({type: "increase"})}}>+</button></div>)
}
博主开始运营自己的公众号啦,感兴趣的可以关注“飞羽逐星”微信公众号哦,拿起手机就能阅读感兴趣的博客啦!
react学习—Reducer Hook相关推荐
- react学习—ImperativeHandle Hook
ImperativeHandle Hook 一.ImperativeHandle Hook 1.情景想象 2.功能实现 一.ImperativeHandle Hook 1.情景想象 如果某种情况下你需 ...
- react学习—ref Hook
ref Hook 一.ref Hook 1.useRef 2.其它使用 一.ref Hook 1.useRef useRef函数: 一个参数:默认值 返回一个固定的对象,{current: 值} im ...
- React学习笔记(八)--- HooK
一.简介 在之前的学习中,我们了解到只有类组件中才能使用 state,函数组件是无法使用的.但Hook的出现,改变这种情况,Hook是React 16.8 版本的新增特性,可以让我们在函数组件中使 ...
- React 学习笔记 —— Ref Hook
用以下三种方式创建 Ref 都可以 import React from 'react'export default function Count () {const [count ,setCount] ...
- React+DvaJS 之 hook 路由权限控制
博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP 活动 招聘 ITeye 写博客 发Chat 登录注册 原 React+DvaJS 之 hook 路由权限控制 20 ...
- react组件卸载调用的方法_好程序员web前端培训分享React学习笔记(三)
好程序员web前端培训分享React学习笔记(三),组件的生命周期 React中组件也有生命周期,也就是说也有很多钩子函数供我们使用, 组件的生命周期,我们会分为四个阶段,初始化.运行中.销毁.错误处 ...
- react项目中的参数解构_一天入门React学习心得
一天入门React学习心得 阅读前必读 本文写的仓促,算是一个学习笔记吧,算是一个入门级的学习文章.如果你刚刚入门,那么可能一些入门的视频可能更加适合你.但如果具备一些知识,比如Vue,那么视频就不适 ...
- React官网Hook API 索引模块知识点整理(五)
react版本:16.13.1 1. 概览 基础 Hook useState useEffect useContext 额外的 Hook useReducer useCallback useMemo ...
- React学习笔记7:React使用注意事项
1. setState setState更新状态的2种写法 方式一:setState(stateChange, [callback])------对象式的setState stateChange为状态 ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
最新文章
- Nature Method :Rob Knight发布Striped UniFrac算法轻松分析微生物组大数据
- Merkle山脉(Merkle Mountain Range)详解
- C# MainWindowHandle为0的解决方法
- es6模块与 commonJS规范的区别
- CSS3之border
- 经典技术书籍分享(5):《WCF技术内幕》封面和购买地址
- Cortex系列ARM内核介绍
- python登录界面实现密码在明文与星号间切换_两个API让星号密码框显示成明文
- 这就是神经网络 7:深度学习-目标检测-超详细图解Faster R-CNN
- 兄弟9020cdn提示更换粉盒_兄弟打印机提示更换墨粉盒怎么办
- B2c运营方法,b2c商城系统源码
- ppi 各代iphone_各代iPhone逻辑分辨率与物理分辨率
- 如何快速使用计算机键盘,怎么使用电脑键盘快速打字
- 2021国防科技大学计算机学院无军籍考研经验贴
- java饼图_java 百分比饼图的实现代码
- linux vi命令的查询,关于Linux vi命令 vi命令一览表
- 基于服务器搭建部署的疫情动态地图
- 衡量两个向量相似度的方法:余弦相似度
- 注册个人工作室费用、手续、材料、时间及流程
- 零基础学习前端-从bootstrap开始(一)
热门文章
- 30天不动如山计划(重要)
- LaTeX参考文献_解决问题:Something‘s wrong--perhaps a missing \item. \end{thebibliography}
- 大一计算机课如何做表格,电脑做表格的基本操作教程
- linux ntfs格式u盘实现与挂载
- RTKLIB-学习笔记
- Magento给Newsletter Subscribers添加状态选项(默认只有Not Activated,Subscribed,Unsubscribed,Unconfirmed)
- 计算机主机电池,台式机主板电池没电不换有什么影响?教你更换电脑主板电池的方法...
- 腾讯汤道生:开放中台能力助力产业升级
- Java实现蓝桥杯 九宫幻方
- 翟菜花:她经济的营销攻坚战,4C的用户导向才是破局之法