react hooks 全面转换攻略(二) react本篇剩余 api
useCallback,useMemo
因为这两个 api 的作用是一样的,所以我放在一起讲;
语法:
function useMemo<T>(factory: () => T, deps: DependencyList | undefined): T;
function useCallback<T extends (...args: any[]) => any>(callback: T, deps: DependencyList): T;
区别在于第一个参数,还有参数的传递,另外 useCallback 中 DependencyList 是一个必须值
这两个 api 的作用基本就是缓存数据/方法
使用过 react 的人都知道,在组件传递值的时候,如果 props 中某一值对象引用发生变化,就会发生重新渲染,即使前后2个对象是完全相同的;
这2个参数就是为了解决这个问题,另外也有可以减轻一些方法的rerender的速度;
useRef
作用基本是取代 class 中的 createRef,在此不多细说
useContext
作用基本是取代 class 中的 Context 中 Context.Provider ,接受参数 Context,因为可能会有多层 context,所以这个参数是必须的,不然无法辨别
useImperativeHandle
语法:
function useImperativeHandle<T, R extends T>(ref: Ref<T>|undefined, init: () => R, deps?: DependencyList): void;
官网是叫 useImperativeMethods,但是我在 @types/react@17.8.7 中,是叫做 useImperativeHandle的,不过函数名还是以实际为准
在官网中,他的作用是这样解释的:
useImperativeMethods自定义使用ref时公开给父组件的实例值。 与往常一样,在大多数情况下应避免使用refs的命令式代码。
这个 api 的使用必定伴随着 forwardRef 这个 api, 使用率基本较低;
官方例子:
function FancyInput(props, ref) {
const inputRef = useRef();
useImperativeMethods(ref, () => ({
focus: () => {
inputRef.current.focus();
}
}));
return <input ref={inputRef} />;
}
FancyInput = forwardRef(FancyInput);
在此示例中,呈现的父组件将能够调用fancyInputRef.current.focus()。
简单的说就是讲子组件中的创建方法暴露给父组件
useMutationEffect
签名与useEffect相同,但在更新兄弟组件之前,它在React执行其DOM突变的同一阶段同步触发。 使用它来执行自定义DOM突变。
同样的 @types/react@16.8.7 没有这个函数的声明;
不过官网中 大多是告诫尽量少用此函数
useLayoutEffect
语法:
function useLayoutEffect(effect: EffectCallback, deps?: DependencyList): void;
参数基本和 useEffect 相同
官方所说的效果:
签名与useEffect相同,但在所有DOM突变后它会同步触发。 使用它从DOM读取布局并同步重新渲染。 在浏览器有机会绘制之前,将在useLayoutEffect内部计划的更新将同步刷新。
不知道大家有没有使用过 vue,他的作用和 vue 中的 nexttick 差不多吧;
在需要读取 dom 的高度,宽度的时候特别需要
说到现在, api 基本已经讲完了,除了 useReducer, 我将会放在 redux 篇中讲述
react hooks 全面转换攻略(二) react本篇剩余 api的更多相关文章
- react hooks 全面转换攻略(一) react本篇之useState,useEffect
useState 经典案例: import { useState } from 'react'; function Example() { const [count, setCount] = useS ...
- react hooks 全面转换攻略(三) 全局存储解决方案
针对 react hooks 的新版本解决方案 一.redux维持原方案 若想要无缝使用原来的 redux,和其配套的中间件 promise,thunk,saga 等等的话 可以使用 redux-re ...
- mac攻略(二) -- 简单配置php开发环境
最简单直接的方式还是使用 Mac 上自带的 Apache 和 PHP. 1.启动 Apache 1>启动apache $sudo apachectl start; 2>启动后,在浏览器 ...
- React Hooks 你不来了解下?
前言 最近在看 React 的新语法-- React Hooks,只能一句话概括:React 语法真的是越来越强大,越写代码越少. 强烈推荐还没看 React Hooks 的同学去学习下,这会让你写r ...
- React Hooks --- useState 和 useEffect
首先要说的一点是React Hooks 都是函数,使用React Hooks,就是调用函数,只不过不同的Hooks(函数)有不同的功能而已.其次,React Hooks只能在函数组件中使用,函数组件也 ...
- React Hooks介绍和环境搭建(一)
React Hooks 简介 2018年底FaceBook的React小组推出Hooks以来,所有的React的开发者都对它大为赞赏.React Hooks就是用函数的形式代替原来的继承类的形式,并且 ...
- React Hooks简单业务场景实战(非源码解读)
前言 React Hooks 是React 16.7.0-alpha 版本推出的新特性.从 16.8.0 开始,React更稳定的支持了这一新特性. 它可以让你在不编写 class 的情况下使用 st ...
- (地址)eclipse插件开发攻略的访问地址
园子地址: http://www.cnblogs.com/liuzhuo/category/257208.html 关键字: Eclipse插件开发彻底攻略 eclipse插件开发基础篇之
- React hooks实践
前言 最近要对旧的项目进行重构,统一使用全新的react技术栈.同时,我们也决定尝试使用React hooks来进行开发,但是,由于React hooks崇尚的是使用(也只能使用)function c ...
随机推荐
- JavaEE JDBC 事务
JDBC 事务 @author ixenos 事务 1.概念:我们将一组语句构建成一个事务(trans action),当所有语句顺利执行之后,事务可以被提交(commit):否则,如果其中某个语句遇 ...
- hdu 1075
#include<stdio.h> #include<string.h> #include<string> #include<iostream> #in ...
- 搭桥(codevs 1002)
题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建 ...
- Mayor's posters-POJ2528(线段树+离散化)
The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign h ...
- 05-js德玛==和===判断
<html> <head> <title>js的特殊关系运算符</title> <meta charset="UTF-8"/& ...
- Django学习系列之Cookie、Session
Cookie和Session介绍 cookie 保存在客户端 session 保存在服务端 session依赖于cookie,比如服务端想往客户端写东西的时候就把cookie写到客户端浏览器 djan ...
- samba服務器下文件夾chmod權限技巧
需要的效果: samba下文件夹(abc)不可以被重命名.不可以被刪除,其所有子目录可读可写. 如何做到: chmod 777 -R abc # -R 使得abc下所有数据继承可读可写权限 chm ...
- yarn-cli 简介
Yarn 提供了丰富的命令行命令来帮你应付你所开发的 Yarn 包的方方面面的工作,包括安装.管理.发布等等. 虽然我们在这里按照字母顺序列出了我们提供的所有命令,但是某些更常用的命令还是要着重提一下 ...
- Unix网络编程 之 socket基础
基本结构 (这部分的地址均为网络地址<网络字节序>) 1.struct sockaddr:通用套接字地址结构 此结构用于存储通用套接字地址. 数据结构定义: typedef unsigne ...
- Growth: 一个关于怎样成为优秀Web Developer 的 App
想了想还是决定在今天公布一个预览版.这样才干持续改进.Growth是一个关于怎样成为优秀的Web Developer的APP--结合技能树.成长路线图.进阶书单.Web七日谈以及一些小測验. 它是我对 ...