Reducer Hook

  • 一、Reducer Hook

一、Reducer Hook

Flux:Facebook出品的一个数据流框架

  1. 规定了数据是单向流动的
  2. 数据存储在数据仓库中(目前,可以认为state就是一个存储数据的仓库)
  3. action是改变数据的唯一原因(本质上就是一个对象,action有两个属性)
    1. type:字符串,动作的类型
    2. payload:任意类型,动作发生后的附加信息
    3. 例如,如果是添加一个学生,action可以描述为:
      1. { type:"addStudent", payload: {学生对象的各种信息} }
    4. 例如,如果要删除一个学生,action可以描述为:
      1. { type:"deleteStudent", payload: 学生id }
  4. 具体改变数据的是一个函数,该函数叫做reducer
    1. 该函数接收两个参数

      1. state:表示当前数据仓库中的数据
      2. action:描述了如何去改变数据,以及改变数据的一些附加信息
    2. 该函数必须有一个返回结果,用于表示数据仓库变化之后的数据
      1. Flux要求,对象是不可变的,如果返回对象,必须创建新的对象
    3. reducer必须是纯函数,不能有任何副作用
  5. 如果要触发reducer,不可以直接调用,而是应该调用一个辅助函数dispatch
    1. 该函数仅接收一个参数:action
    2. 该函数会间接去调用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相关推荐

  1. react学习—ImperativeHandle Hook

    ImperativeHandle Hook 一.ImperativeHandle Hook 1.情景想象 2.功能实现 一.ImperativeHandle Hook 1.情景想象 如果某种情况下你需 ...

  2. react学习—ref Hook

    ref Hook 一.ref Hook 1.useRef 2.其它使用 一.ref Hook 1.useRef useRef函数: 一个参数:默认值 返回一个固定的对象,{current: 值} im ...

  3. React学习笔记(八)--- HooK

    一.简介 ​ 在之前的学习中,我们了解到只有类组件中才能使用 state,函数组件是无法使用的.但Hook的出现,改变这种情况,Hook是React 16.8 版本的新增特性,可以让我们在函数组件中使 ...

  4. React 学习笔记 —— Ref Hook

    用以下三种方式创建 Ref 都可以 import React from 'react'export default function Count () {const [count ,setCount] ...

  5. React+DvaJS 之 hook 路由权限控制

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP 活动 招聘 ITeye 写博客 发Chat 登录注册 原 React+DvaJS 之 hook 路由权限控制 20 ...

  6. react组件卸载调用的方法_好程序员web前端培训分享React学习笔记(三)

    好程序员web前端培训分享React学习笔记(三),组件的生命周期 React中组件也有生命周期,也就是说也有很多钩子函数供我们使用, 组件的生命周期,我们会分为四个阶段,初始化.运行中.销毁.错误处 ...

  7. react项目中的参数解构_一天入门React学习心得

    一天入门React学习心得 阅读前必读 本文写的仓促,算是一个学习笔记吧,算是一个入门级的学习文章.如果你刚刚入门,那么可能一些入门的视频可能更加适合你.但如果具备一些知识,比如Vue,那么视频就不适 ...

  8. React官网Hook API 索引模块知识点整理(五)

    react版本:16.13.1 1. 概览 基础 Hook useState useEffect useContext 额外的 Hook useReducer useCallback useMemo ...

  9. React学习笔记7:React使用注意事项

    1. setState setState更新状态的2种写法 方式一:setState(stateChange, [callback])------对象式的setState stateChange为状态 ...

  10. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

最新文章

  1. Nature Method :Rob Knight发布Striped UniFrac算法轻松分析微生物组大数据
  2. Merkle山脉(Merkle Mountain Range)详解
  3. C# MainWindowHandle为0的解决方法
  4. es6模块与 commonJS规范的区别
  5. CSS3之border
  6. 经典技术书籍分享(5):《WCF技术内幕》封面和购买地址
  7. Cortex系列ARM内核介绍
  8. python登录界面实现密码在明文与星号间切换_两个API让星号密码框显示成明文
  9. 这就是神经网络 7:深度学习-目标检测-超详细图解Faster R-CNN
  10. 兄弟9020cdn提示更换粉盒_兄弟打印机提示更换墨粉盒怎么办
  11. B2c运营方法,b2c商城系统源码
  12. ppi 各代iphone_各代iPhone逻辑分辨率与物理分辨率
  13. 如何快速使用计算机键盘,怎么使用电脑键盘快速打字
  14. 2021国防科技大学计算机学院无军籍考研经验贴
  15. java饼图_java 百分比饼图的实现代码
  16. linux vi命令的查询,关于Linux vi命令 vi命令一览表
  17. 基于服务器搭建部署的疫情动态地图
  18. 衡量两个向量相似度的方法:余弦相似度
  19. 注册个人工作室费用、手续、材料、时间及流程
  20. 零基础学习前端-从bootstrap开始(一)

热门文章

  1. 30天不动如山计划(重要)
  2. LaTeX参考文献_解决问题:Something‘s wrong--perhaps a missing \item. \end{thebibliography}
  3. 大一计算机课如何做表格,电脑做表格的基本操作教程
  4. linux ntfs格式u盘实现与挂载
  5. RTKLIB-学习笔记
  6. Magento给Newsletter Subscribers添加状态选项(默认只有Not Activated,Subscribed,Unsubscribed,Unconfirmed)
  7. 计算机主机电池,台式机主板电池没电不换有什么影响?教你更换电脑主板电池的方法...
  8. 腾讯汤道生:开放中台能力助力产业升级
  9. Java实现蓝桥杯 九宫幻方
  10. 翟菜花:她经济的营销攻坚战,4C的用户导向才是破局之法