react中useReduer和useEffect

news2025/1/6 18:26:15

相信很多人对于变成中reduce、reducer命名都存在困惑,为了更好理解useRedecuer,我们不妨先来说说reduce。

如何理解reduce和reducer

reduce:函数式编程当中的一个术语,reduce操作被称为Fold折叠

// 通过reduce,数组实现折叠。reduce函数的的入参数被称为reducer
const sum = [0, 1, 2].reduce((prev, item) => {
  return prev + item;
}, 0)

拿JavaScript来理解。reduce属于一种高阶函数,它将其中的回调函数reducer递归应用到数组的所有元素上并返回一个独立的值。这也就是“缩减”或“折叠”的意义所在了。

reducer:(state, action) => newState
redux中的reducer函数是因为它的入参和返回值都非常类似于arr的reduce中传入的回调函数

// reducer接收两个参数: state=[], action 
// reducer返回值是一个新的state
const todos = (state=[], action) => {
	switch(action){
    case "ADD":
      return [...state, {id: 111}];
    default:
      return state;
  }
}

useReducer是啥,和useState有什么关系区别

useRedcuer是useState的替换方案
和useState相比,它更适合state逻辑复杂,或者state是个对象,包含多个子值,或者下一个state依赖于之前的stated的情况。相当于收敛逻辑于reducer函数中进行管理

useReducer使用

用useReducer实现一个
在这里插入图片描述

const reducer = (state, action) => {
  switch (action) {
    case 'INCREMENT':
      return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state;
  }
};

function Reducer() {
  const [num, dispatch] = useReducer(reducer, 1);

  return (
    <div>

      <p>
        useStateByReducer :
        <button
          onClick={() => {
            dispatch('DECREMENT');
          }}
        >
          -
        </button>
        {num}
        <button
          onClick={() => {
            dispatch('INCREMENT');
          }}
        >
          +
        </button>
      </p>
    </div>
  );
}

export default Reducer;

用useReducer实现一个useState

import { useReducer, useRef } from 'react';

const isFunction = (fn) => {
  return Object.prototype.toString.call(fn) === '[object Function]';
};

export default (initialState) => {
  const reducer = (state, action) => {
    return isFunction(action) ? action(state) : action;
  };
  return useReducer(reducer, initialState);
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公司内部有奖知识答题活动怎么做

公司年会趣味问答、员工业务知识考核、消防安全、党史等知识测试......公司内部的答题活动已经成了众多管理者、HR日常工作中一部分。如何让组织者更轻松、更公平公正地举办答题活动&#xff1f;如何让员工更积极参与呢&#xff1f;试试答题小博士的有奖答题。有奖答题活动形式…

中晶FileScan 3222扫描仪 Code:-206,卡纸或滚筒出错

中晶FileScan 3222是中晶品牌下的一款扫描仪。 型号 3222 产品类型 平板式+馈纸式 扫描光源 LED

机器人中的数值优化之BFGS(convex and smooth)

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 Why Quasi-Newton Methods 2 Rate of convergence 3 Quasi-Newton Methods 3.1 Quasi-Newton approximation 3.2 preserve descent direction 3.3 secant condition 3.4 iterate B 3.5 Parsed solution B 4 Cont…

微信小程序学习第2天——模板语法与样式,全局配置与页面配置

文章目录一、WXML模板语法1、数据绑定2、事件绑定3、条件渲染4、列表渲染二、WXSS模板样式rpximport语法导入样式全局和局部样式三、全局配置全局配置文件及常用配置项windowtabBar四、页面配置一、WXML模板语法 1、数据绑定 数据绑定的原则&#xff1a;①在data中定义数据 ②…

亚信安慧携AntDB数据库入选信通院软件供应链厂商和产品名录

日前&#xff0c;中国信息通讯研究院&#xff08;简称&#xff1a;中国信通院&#xff09;在其主办的3SCON软件供应链安全大会上&#xff0c;发布了软件供应链厂商和产品名录。中国信通院云计算与大数据研究所副所长栗蔚表示&#xff0c;我国软件供应链安全发展面临制度体系待完…

微服务组件(高并发带来的问题 服务器雪崩效应 Sentinel入门)

高并发带来的问题 服务器雪崩效应 Sentinel入门高并发带来的问题模拟高并发服务器雪崩效应常见容错方案Sentinel入门(常见的容错组件)什么是Sentinel?订单服务集成Sentinel流控规则预热流控等待流控关联流控链路流控降级(提供一个兜底方案)慢调用比例异常比例异常数案例高并发…

显著图(Saliency map)

这里写目录标题概念应用算法传统算法静态显著性算法&#xff1a;对数光谱&#xff08;SpectralResidual&#xff09;&#xff1a;静态显著性算法&#xff1a;细粒方法&#xff08;FineGrained&#xff09;&#xff1a;人工智能算法基于眼动仪预测显著性区域方法积分梯度方法对比…

jsp学生宿舍管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 学生宿舍管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使…

【Vue】Vue的简介和特性

一、Vue简介Vue.js可以说是MVVM架构的最佳实践&#xff0c;是一个JavaScript MVVM库&#xff0c;是一套构建用户界面的渐进式前端框架。专注于MVVM中的ViewModel&#xff0c;不仅做到了数据双向绑定&#xff0c;而且也是一款相对比较轻量级的JS 库&#xff0c;API简洁。1. 构建…

Day 15 SpringBoot Condition

1 Condition作用&#xff1a;该功能可以选择性的创建Bean1.1 验证在Spring的IOC容器中有一个User的 Bean&#xff0c;现要求导入Jedis坐标后&#xff0c;加载该Bean&#xff0c;没导入&#xff0c;则不加载。【第一步】创建User对象Repository Conditional(ClassCondition.clas…

【yolov5系列】yolov5-onnxruntime在Ubuntu和RK芯片上运行

前言 这里yolov5的onnx模型的推理&#xff0c;分别在 x64上 和 移动端上运行&#xff0c;前者在自己本地Ubuntu系统上运行&#xff0c;后者在瑞芯微的rk3566上运行。 要完成如上工作我们需要一下步骤&#xff1a; 1 下载onnxruntime编译好的库2 下载opencv库并安装3 下载交叉编…

88E1548P大流量传输插拔网线导致网络不通

1、测试环境硬件&#xff1a;NXP LS1046A ARM64平台 88E1548P 软件&#xff1a;linux 4.19.26 linux 5.10.35环境说明&#xff1a;88E1548P 是一个QSGMII 的 phy 芯片&#xff0c;LS1046A CPU 提供4个GMAC 与 88E1548P 连接&#xff0c;就是4个千兆网口。2、具体现象eth7发包…

OFDM系统架构梳理(1)

1、ofdm简介OFDM是一种特殊的多载波传输方案&#xff0c;它可以被看作是一种调制技术&#xff0c;也可以被当作一种复用技术。多载波传输把数据流分解成若干子比特流&#xff0c;这样每个子数据流将具有低得多的比特速率&#xff0c;用这样的低比特率形成的低速率多状态符号再去…

Spring Batch 批处理-步骤Step与Tasklet

引言 接着上篇&#xff1a;Spring Batch 批处理-执行上下文&#xff0c;了解作业执行上下文后&#xff0c;本篇就来了解一下Spring Batch批处理步骤Step对象与任务处理对象Tasklet&#xff0c;看下Spring Batch 如何运作的。 步骤介绍 一般认为步骤是一个独立功能组件&#…

密码学大咖DavidWong历经数年创作编写而成的这本书

从我开始写本书到图书出版已经有几年了。最初&#xff0c;我打算将本书作为介绍现实世界常用密码原语的图书。但是&#xff0c;这显然是一件不可能完成的事情。任何一个领域都不可能用一本书来总 结清楚。出于这个原因&#xff0c;我必须在知识的深度和广度之间找到平衡。我希望…

3.6双端口RAM和多模块存储器

文章目录关键词正文一、存取周期二、引子三、双端口RAM四、多体并行存储器&#xff08;1&#xff09;高位交叉编址方式&#xff08;2&#xff09;低位交叉编址方式&#xff08;3&#xff09;编址&#xff08;4&#xff09;特性举例<1> 高位交叉编址<2> 低位交叉编址…

word实用技巧:拼音指南用法及注意事项

如果你是一位语文老师&#xff0c;在为学生准备试卷时&#xff0c;时常会用到Word拼音指南功能&#xff1b;如果你是一位职场白领&#xff0c;在为领导准备发言稿、颁奖名单时&#xff0c;以防领导读错音&#xff0c;也会用到Word拼音指南功能对生僻字&#xff0c;多音字进行单…

RabbitMQ 获取消息(Ack Mode)

在服务器端的客户端页面从队列中获取消息是一个危险的动作&#xff0c;生产环境一定要了解业务之后再做操作。 Act Mode Nack message requeue true 接收消息但不做确认&#xff0c;消息会重新加入队列 Automatic ack 获取消息&#xff0c;应答确认&#xff0c;消息不…

C#,编程语言的基本概念与知识点

本文归纳整理C#的一些知识点&#xff0c;便于快速浏览与掌握C#语言的一些基本概念。本文并没有很好地层次与组织&#xff0c;抄了不少&#xff0c;写了不少&#xff0c;想到什么&#xff0c;就写什么。01 类 class类是C#等面向对象编程语言&#xff08;Object-oriented program…

分享152个ASP源码,总有一款适合您

ASP源码 分享152个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 152个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1fOOs06p6YghEzceqJ4twaA?pwd0p4z 提取码&#x…