useState 状态钩子
- useState()给函数式组件引入状态 state ,纯函数不能有状态,所以状态放在钩子里面
1 | //引入钩子组件 |
useContext 共享状态钩子
1 | import React, { useContext } from "react"; |
userReducer(): action 钩子
1 | import React, { useReducer } from "react"; |
由于 Hooks 可以提供共享状态和 Reducer 函数,所以它在这些方面可以取代 Redux。但是,它没法提供中间件(middleware)和时间旅行(time travel),如果你需要这两个功能,还是要用 Redux。
useEffect 副作用钩子
- 用来引入有副作用的操作,最常见的就是向服务器请求数据,之前放在 componentDidMount 里面的代码,现在可以放在这里
- useEffect 接收两个参数,第一个是函数,一步的操作代码放在里面,第二个是一个数组,用于给出 Effect 的依赖项,只要这个数组发生变化,useEffect()就会执行,第二个参数省略,每次组件渲染时,就会执行 useRffect
1 | import React, { useState, useEffect } from "react"; |
useMemo 防止子组件重复执行
父组件状态发生变化,子组件也会重新执行一次 (对应类组件的 componentWillReciveProps,shouldComponentUpdate)
要防止子组件方法调用,我们可以使用 useMemo 来取消没有必要的重新计算
1 | import { useState } from 'react'; |
1 | import { useMemo } from "react"; |
通过 useMemo 就可以实现,点击 name,子组件只重绘 name,点击 content,子组件只重绘 content,减少了页面没有必要的页面重绘,用来提升组件性能,与类组件 shouldComponentUpdate 达到的效果一样。
useRef
useRef 可以保存组件节点、变量
react 获得组件节点方式:
- ref=”” 通过 this.refs 调用
- ref={(ref)=>this.btnRef=ref}
- this.btfRef = React.createRef() ref={this.btnRef}
上面三种方式是类组件获得组件实例的方式,或多或少都用到来 this,在函数式组件并不适用
1 | import { useRef } from "react"; |
使用 useContext、useReducer 封装一个类似于 redux 仓库
- 第一步 创建 store.js
1 | import { createContext } from "react"; |
- 第二步 父组件挂载 context
1 | /** @format */ |
- 第三步 在子组件调用
1 | import React, { useContext, useEffect } from "react"; |
useCallback
React.memo
在类组件中数据发生变化,子组件依赖 props 监听到依赖,就算值一样也会发生 re-render(重绘)
- shouldComponentUpdate+componentWillRecieveProps 来判断
- React.PureComponent 来定义类
在函数式组件中,我们可以通过 React.memo()来优化组件
1 | import React from "react"; |
I'm so cute. Please give me money.
- Post link: https://blog.gaocaipeng.com/2020/04/23/mb8fz1/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.