You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
想要在 React 绑定或解绑 DOM 节点的 ref 时运行某些代码,则需要使用回调 ref 来实现
我们在 class 中通过 ref 属性来访问 DOM,然而useRef()比 ref 属性更好用 —— useRef()可以很方便地保存任何可变值。
访问 DOM:
import{useRef}from'react'exportdefaultfunctionExample(){constinputEl=useRef(null)constonButtonClick=()=>{inputEl.current.focus()// `current` 指向已挂载到 DOM 上的文本输入元素}return(<div><inputref={inputEl}type="text"/><buttononClick={onButtonClick}>Focus the input</button></div>)}
缓存数据:useRef 可以第一个参数可以用来初始化保存数据,这些数据可以在 current 属性上获取到 ,当然我们也可以通过对 current 赋值新的数据源。
React Hooks 使用总结
组件类的缺点
函数组件
类和纯函数
类:数据和逻辑的封装
纯函数:只应该做一件事,就是返回一个值
副作用:数据计算无关的操作
Hook
目的:
含义:
Hook 方法
useState
特点:
使用:
useEffect
特点:
与 useLayoutEffect 的执行过程对比:
只要是副效应,都可以使用
useEffect()
引入。它的常见用途有下面几种:注意:如果有多个副效应,应该调用多个
useEffect()
,而不应该合并写在一起。使用搜索功能体验下各种状态是如何处理的,详细内容讲解,见这里[译] 如何使用 React hooks 获取 api 接口数据
主要包含:
为什么要在 effect 中返回一个函数?这是 effect 可选的清除机制。
React 何时清除 effect?
接下来模拟下实际项目中倒计时的写法,使用了 setTimeout 模拟 setInterval,当然也使用到了清除操作。
useRef
特点:
我们在 class 中通过 ref 属性来访问 DOM,然而
useRef()
比 ref 属性更好用 ——useRef()
可以很方便地保存任何可变值。访问 DOM:
缓存数据:useRef 可以第一个参数可以用来初始化保存数据,这些数据可以在 current 属性上获取到 ,当然我们也可以通过对 current 赋值新的数据源。
封装一个 usePrevious:
还可以用在定时器:
由于 usestate,useReducer 执行更新数据源的函数,会带来整个组件从新执行到渲染,如果在函数组件内部声明变量,则下一次更新也会重置,那我们使用 useRef,就可以既想要保留数据,又不想触发函数的更新。
useContext
React.createContext
的返回值)并返回该 context 的当前值<MyContext.Provider>
的 value prop 决定useReducer
特点:
使用:
useMemo
优点
比如我们使用防抖函数时需要这样做:
这样的话,用 useMemo 包裹之后的 debounce 函数可以避免了每次组件更新再重新声明,可以限制上下文的执行。
useCallback
useCallback(fn, [])
相当于useMemo(() => fn, [])
useMemo 和 useCallBack 示例
接下来的组件中,我们维护了两个 state,可以看到 getCount 的计算仅仅跟 count 有关,那么我们兵分三路,逐个了解下各自的军情。
当我们点击
+1
时,打印如下:当我们输入时,打印如下,只有普通调用的打印结果:
如上所示,普通调用时,无论是 count 还是 val 变化,都会导致 getCount 重新计算,所以这里我们希望 val 修改的时候,不需要再次计算,这种情况下我们可以使用 useMemo。
同样的,使用了 useCallback 后,结合
React.memo
,显示结果和 useMemo 完全一致。如果这里值使用了 useCallback,而并未使用React.memo
,结果如何呢?答案就是和普通调用结果一致。那 useMemo 和 useCallback 到底有什么异同呢?
自定义 Hook
特点:
规则:
注意:一个好用的自定义 hooks,一定要配合 useMemo, useCallback 等 api 一起使用
自定义获取数据的 Reducer Hook:
Hook 规则
参考资料
The text was updated successfully, but these errors were encountered: