一、Hooks

为什么要使用react-hooks

  1. 高阶组件为了复用,导致代码层级复杂;
  2. 生命周期的复杂 ;
  3. 写成function组件,无状态组件,但是又需要状态,改成class组件成本太高 不存在声明周期 。

常用

useState:创建状态

import React, {useState} from 'react'
export default function Test() {const [name,setname]=useState('leo);
return(<div>{name}<button onClick={() => {setname('lee');}}>ddd</button></div>)
}

useEffect:副作用(监听某个依赖是否发生改变,从而实现另外的目的)

const [name,setname]=useState('leo');
// 副作用处理
useEffect(() => {//如果在这里对name做了修改,那么数组中必须指明对应的依赖(依赖指状态)setname(name.toUpperCase()); return () => {console.log('在这里组件被销毁')},[name]);
// 第二个参数如果是空数组那么第一个参数只走一次
// 如果[name]name作为依赖存在
//只要被修改,第一个参数就会走一次
// 在这里可以看做是对状态数据的再次加工处理

useCallBack:对函数进行缓存,提升性能(并不能太大提升性能,最大的作用是防止子组件reRender())

import React,{useState,useCallback}from 'react'
export default function Test1(){ const [val,setval]=useState('');const [list,setlist]=useState([]); const addltem=useCallback(()=> { console.log(val); setlist(...list, vall)},[val]) return(<div><input defaultValue={val}onChange={(e) => { setval(e.target.value);}} /><p>{val}</p>{ list.map((n, index) => <p key={'item'+index}>{index}-{n}</p>) }<button onClick=(()=>{ additem(); }}>点我</button> </div>)}
const[name,setname]=useState('lee')
const myFn=useCallBack(() => {console.log(name);
},[nmae])
// 只有name改变,函数才会重新生成一次
// 如果传入空数组,函数首次执行生成,之后不变
// 如果不传数组,每次都会生成新的函数

useMemo:对状态值属性值进行再次计算

const getResult = useMemo(() => list.mpa(n => n**2),[list])

useRef():懂得都懂

useContext():参考类组件context状态树,写法上更简洁

import React,{useReducer} from 'react// 处理函数
const reducer=(prevState,action)=> {
let state={.….prevState);
//prevState 只读
switch(action.key){ case 'key1':代码1; break; case 'key2'代码2; break: default: break:
return state;//外部对象
const intailState ={ count: 0 }

useReducer()

// dispatch: 发送信号执行外部的reducer方法
const [state, dispatch] = useReducer(reducer, intailState);
<button onClick={() => {dispatch({ type: 'key1'})
}}

useReducer+useContext:解决大量组件传值问题

自定义hooks

  • 必须以“use”开头
  • 当我们想在两个函数之间共享逻辑时,我们会把它提取到第三个函数中
  • 再解释:将复杂代码封装到函数中

小结

为什么要用?解决了什么问题:完善函数组件能力

如何模拟生命周期

  • compontenDidMount , useEffect依赖[]
  • compontenDidUpdate , useEffect无依赖或者依赖[a,b]
  • compontenWillUnmonunt ,useEffect返回一个函数

【web】React-hooks相关推荐

  1. mounty不可重新挂载因为先前没有完全卸载_【译】React Hooks测试完全指南

    原文地址:https://www.toptal.com/react/testing-react-hooks-tutorial 2018年底,React在16.8版本中引入了Hooks.它们(译注:指R ...

  2. 【构建】react打造你的第一个Bilibili首页开发项目

    [构建]react打造你的第一个Bilibili首页开发项目 简 介 Hello 小极客们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富开源项目的动力![ ...

  3. 【Web】Rest API 验证授权如何做?

    参考资料: [Web]Rest && 权限管理等:http://www.itdadao.com/2016/03/15/593144/ 无需OAuth就可以设计一个安全的REST (We ...

  4. 01【Web】基础-HTML

    01[Web]基础-HTML(P1) 本系列文章,针对Web前端的相关知识进行了详细的介绍 文章目录 01[Web]基础-HTML(P1) Chapter01 HTML概述 1. Internet起源 ...

  5. 03【Web】基础-JavaScript

    03[Web]基础-JavaScript(P2)对象 本系列文章,针对Web前端的相关知识进行了详细的介绍 文章目录 03[Web]基础-JavaScript(P2)对象 1. 数组对象 1.1 基本 ...

  6. 【入门】React 17 + Vite + ECharts 实现疫情数据可视化「02 快速搭建项目」

    往期文章目录: [入门]React 17 + Vite + ECharts 实现疫情数据可视化「01 项目介绍篇」 文章目录 快速搭建项目 介绍 Vite Vite 特点 搭建第一个 Vite 项目 ...

  7. 【Web】HAProxy走私漏洞

    [Web]HAProxy走私漏洞 JFrog安全研究团队发布了一个HAProxy的严重漏洞的信息.HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和H ...

  8. 【React全家桶】React Hooks

    React Hooks hooks介绍 useState(保存组件状态) useEffect() useCallback(记忆函数) useMemo() 记忆组件 useRef(保存引用值) useR ...

  9. 【前端】react and redux教程学习实践,浅显易懂的实践学习方法。

    前言 前几天,我在博文[前端]一步一步使用webpack+react+scss脚手架重构项目 中搭建了一个react开发环境.然而在实际的开发过程中,或者是在对源码的理解中,感受到react中用的最多 ...

  10. [置顶] 【稀饭】react native 实战系列教程之热更新原理分析与实现

    很多人在技术选型的时候,会选择RN是因为它具有热更新,而且这是它的一个特性,所以实现起来会相对比较简单,不像原生那样,原生的热更新是一个大工程.那就目前来看,RN的热更新方案已有的,有微软的CodeP ...

最新文章

  1. ReactiveCocoa源码拆分解析(七)
  2. OC高级编程——深入block,如何捕获变量,如何存储在堆上
  3. 如何在Visual Studio中直接使用示例代码浏览器搜索下载和管理代码示例
  4. Qt中QAbstractTableModel、QItemDelegate的联合使用
  5. apply plugin: 'idea' --- gradle idea
  6. python3 logging模块
  7. 性能测试关注点整理总结
  8. poj 2069 Super Star 模拟退火
  9. Mac使用Homebrew安装Kafka
  10. 自动驾驶路径规划论文解析(4)
  11. SSM框架-实现Mybatis分页功能-foreknow_cms
  12. HDU 2159 完全背包
  13. 虚拟机桥接模式下配置静态IP
  14. FITC-STL,PL;荧光素标记马铃薯凝集素(STL,PL)
  15. C#Base64编码
  16. Python杂谈 | (12) OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initia
  17. 一眼就会table隔行换色、table表头固定、隔行色、鼠标移动行换色
  18. 图片柱面投影简单实现
  19. Initialization error Could not load .../oci.dll
  20. 什么?到现在你还不知道什么是 访问修饰限定符吗?

热门文章

  1. Win10 任务栏使用小图标
  2. 《实时控制软件设计》第一次编程作业
  3. 响应式设计中怎样布局?
  4. php 竞拍系统,基于PHP+Mysql的校园商品拍卖系统
  5. AlexNet模型及代码详解
  6. 511遇见易语言学习易语言常量
  7. 解释@Transactional注解的用法
  8. pta 7-29 螺旋矩阵
  9. ui曲线谁是横坐标_在数学中,横坐标是X轴还是Y轴
  10. Linux下查找归档的内容