React Hook 官网地址:https://react.docschina.org/docs/hooks-faq.html


(1)问题分析?

Hook 是什么?

Hook 是一个特殊的函数,它可以让你“钩入” React 的特性。例如,useState 是允许你在 React 函数组件中添加 stateHook。稍后我们将学习其他 Hook。

什么时候我会用 Hook?

如果你在编写函数组件并意识到需要向其添加一些 state,以前的做法是必须将其它转化为 class。现在你可以在现有的函数组件中使用 Hook

什么是副作用?

React 组件中执行数据获取、订阅或者手动修改 DOM,我们统一把这些操作称为“副作用”,或者简称为“作用”。

两种常见副作用操作是什么?
  • 需要清除的
  • 不需要清除的

不需要清除effect

只想在 React 更新 DOM 之后运行一些额外的代码。(比如发送网络请求,手动变更 DOM,记录日志,这些都是常见的无需清除的操作。)

需要清除effect

例如订阅外部数据源。这种情况下,清除工作是非常重要的,可以防止引起内存泄露!



(2)useEffect使用和意义?

  1. 在一个函数里面可以多次使用;
  2. 代表 componentDidMount、componentDidUpdate 和 componentWillUnmount
  3. useEffect默认可以当做class中的componentDidMount生命周期:只在组件挂载的时候运行一次;
  4. 清除副作用,在useEffect 的函数中 ,在return一个函数;(副作用函数还可以通过返回一个函数来指定如何“清除”副作用);
  5. 只能在函数最外层调用 Hook。不要在循环、条件判断或者子函数中调用;
  6. 只能在 React 的函数组件中调用 Hook。不要在其他 JavaScript 函数中调用;
  7. 组件之间重用一些状态逻辑(高阶组件和 render props)自定义 Hook 可以让你在不增加组件的情况下达到同样的目的。

①、②、③、④、⑤、⑥、⑦、⑧、⑨、⑩ ⑪、⑫、⑬、⑭、⑮

useEffect 问题总结

①、useEffect 做了什么?
通过使用这个 Hook,你可以告诉 React 组件需要在渲染后执行某些操作。

②、为什么在组件内部调用 useEffect?
将 useEffect 放在组件内部让我们可以在 effect 中直接访问 count state 变量(或其他 props)。

③、useEffect 会在每次渲染后都执行吗?
是的,默认情况下,它在第一次渲染之后和每次更新之后都会执行。

④、使用useEffect Hook 其中一个目的?
就是要解决 class 中生命周期函数经常包含不相关的逻辑,但又把相关逻辑分离到了几个不同方法中的问题。

⑤、useEffect 执行顺序?
Hook 允许我们按照代码的用途分离他们, 而不是像生命周期函数那样。React 将按照 effect 声明的顺序依次调用组件中的每一个 effect。
⑥、在某些情况下,每次渲染后都执行清理或者执行 effect 可能会导致性能问题?

如果某些特定值在两次重渲染之间没有发生变化,你可以通知 React 跳过对 effect 的调用,只要传递数组作为 useEffect 的第二个可选参数即可:

useEffect(() => {document.title = `You clicked ${count} times`;
}, [count]); // 仅在 count 更改时更新

⑦、何时使用?
如果你要使用此优化方式,请确保数组中包含了所有外部作用域中会随时间变化并且在 effect 中使用的变量,否则你的代码会引用到先前渲染中的旧变量。

⑧、如何执行一次effect
如果想执行只运行一次的 effect(仅在组件挂载和卸载时执行),可以传递一个空数组([])作为第二个参数。

useEffect(() => {document.title = `You clicked ${count} times`;
}, []); // 仅在 count 更改时更新

(3)react hook复用数据状态?

可以创建涵盖各种场景的自定义 Hook,如表单处理、动画、订阅声明、计时器,甚至可能还有更多我们没想到的场景。

(4)useContext 和useReducer 的作用?

useContext (不使用组件嵌套就可以订阅 React 的 Context)

useReducer 可以让你通过 reducer 来管理组件本地的复杂 state

** ①、useContext接受值,返回值,context的值来源?**

const value = useContext(MyContext);

接收一个 context 对象(React.createContext 的返回值)并返回该 context 的当前值。当前的 context 值由上层组件中距离当前组件最近的 <MyContext.Provider> 的 value prop 决定。
注意点:
useContext 的参数必须是 context 对象本身

** ②、useReducer使用场景?**

const [state, dispatch] = useReducer(reducer, initialArg, init);

state 逻辑较复杂且包含多个子值,
或者下一个 state 依赖于之前的 state 等

(5)使用State Hook说明

组件昵称(称呼)?
没有React state 的能力的成为“无状态组件”,有React state 的能力的成为“函数组件”;

useState 需要哪些参数?
useState() 方法里面唯一的参数就是初始 state;

调用 useState 方法的时候做了什么?
它定义一个 “state 变量”;

useState 方法的返回值是什么?
返回值为:当前 state 以及更新 state 的函数。

读取state?

<p>You clicked {count} times</p>

更新state?

<button onClick={() => setCount(count + 1)}>Click me</button>

初始化时需要处理state情况?

(1)初始值需要计算
如果初始 state 需要通过复杂计算获得,则可以传入一个函数,在函数中计算并返回初始的 state,此函数只在初始渲染时被调用:

const [state, setState] = useState(() => {const initialState = someExpensiveComputation(props);return initialState;
});

(2)初始值需要计算,且消耗较大
如果你在渲染期间执行了高开销的计算,则可以使用 useMemo 来进行优化。

(6)使用useRef说明

const refContainer = useRef(initialValue);

useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)。返回的 ref 对象在组件的整个生命周期内保持不变。

以上都是常见疑惑问题总结,下一篇写一下实例分析;

react hook问题讲解相关推荐

  1. 关于react hook视频讲解笔记

    https://react.docschina.org/docs/hooks-intro.html Hook 是能让你在函数组件中"钩入" React 特性的函数.它们名字通常都以 ...

  2. react讲解(函数式组件,react hook)

    文章目录 前言 一.函数式组件 理解: 作用 代码示例: 函数组件注意事项 二.React hook React Hooks 优势 Hook 使用规则 2.常用的hook useState useEf ...

  3. React Hook基本使用踩坑指南

    React因为提倡函数式编程,所以提出了Hook思想来增强函数组件的功能,以此来替代基于Class的组件.但是我们有可能从基于Class这样的实例化组件转向函数组件时思想还没有完全转过来,还是用基于实 ...

  4. 尝鲜用 React Hook + Parcel 构建真心话大冒险简单页面

    首发于我的 Blog 阅读推荐:本人需要您有一定的 React 基础,并且想简单了解一下 Hook 的工作方式和注意点.但是并不详细介绍 React Hook,如果想有进一步的了解,可以查看官方文档. ...

  5. React Hook + Typescript,实现高颜值在线记账本

    React 已经是 JavaScript 生态系统中最受欢迎的前端框架之一.尽管人们已经对它赞不绝口,但 React 团队仍然在努力让它变得更好. 在 2018 ReactConf 大会上,React ...

  6. 【笔记-node】《Egg.js框架入门与实战》、《用 React+React Hook+Egg 造轮子 全栈开发旅游电商应用》

    20210226-20210227:<Egg.js框架入门与实战> 课程地址:https://www.imooc.com/learn/1185 第一章 课程导学 01-01 课程介绍 一. ...

  7. 在React Hook里使用history.push跳转

    在React Hook里使用history.push跳转 react hook里用不了this.props.history的解决方法 首先引入 import { useHistory } from ' ...

  8. 源码解析 React Hook 构建过程

    2018 年的 React Conf 上 Dan Abramov 正式对外介绍了React Hook,这是一种让函数组件支持状态和其他 React 特性的全新方式,并被官方解读为这是下一个 5 年 R ...

  9. hook xposed 自定义类_【开始学习React Hook(1)】Hook之useState

    react hook是react推出的一种特殊函数.这些函数可以让你在不创建react class的情况下依然可以使用react的一些特性(诸如目前react的钩子函数拥有的所有特性). 最常用的ho ...

最新文章

  1. 城市追风口,车企“缉拿”路测牌照
  2. WORDPRESS自定义文章列表显示
  3. CSS display overflow 属性 cursor光标类型
  4. 《PHP求职宝典》--Web设计页面笔记
  5. .net 深入系统编程(三)
  6. SAP Spartacus 自定义 PageResolver 的用法
  7. 服务器在行例维护中,8月14日服务器例行维护公告
  8. excel range 判断日期型_为什么精英都是Excel控?
  9. (转)Redis上踩过的一些坑-美团
  10. entity framework mysql guid,c# – 自动生成不是Entity Framework中主键的GUID列
  11. 关于Microsoft Office 2007 Beta 简体中文版的一些消息
  12. 使用Redis进行简单的数据缓存
  13. 关于rocketmq的配置启动
  14. 如何做到秒级扩容1000加业务节点
  15. 调试经验——Win 10 Excel中Alt+Tab不能切换窗口的解决方法
  16. Java实现细菌觅食算法_细菌觅食算法的matlab代码
  17. 在AWS Lambda上部署标准FFmpeg工具——Docker方案
  18. Python高效编程的19个技巧
  19. 数据库系统(PostgreSQL)
  20. 【windows虚拟机装openwrt做主路由扩wan扩lan】

热门文章

  1. Servlet 表单数据
  2. 初学者也能看懂的DPDK解析
  3. 深入浅出学Hive:Hive QL
  4. iptables for循环
  5. 思科发布全新Catalyst 2960-L系列交换机
  6. DateTimePicker控件在WinXP下的BUG
  7. 获取Spring中的bean,使得线程安全性得到保障
  8. Linux安装SNMP
  9. 英宝通4.0公开课---致力于提供最新的Unity3D技术
  10. memmove() -- 拷贝内存内容