React 其他 Hooks

其他 Hooks

useRef

可用于获取 DOM 元素

javascript 复制代码
 const ScrollRef = useRef(null)
 ScrollRef.current

useContext

(先回顾一下之前的 Context 知识,借用之前 ppt 和源码)

Hooks 中使用 useContext获取 context 的值

javascript 复制代码
 // 父组件创建 context
 export const MenuContext = createContext<IMenuContext>({ index: 0 })    // 初始值
 ​
 // context 传递的数据
 const passedContext: IMenuContext = {
     index: currentActive ? currentActive : 0,
     onSelect: handleClick,
 }
 ​
 <MenuContext.Provider value={passedContext}>
     {renderChildren()}
 </MenuContext.Provider>
 ​
 // 子组件使用
 const context = useContext(MenuContext)
 context.onSelect(index)

useReducer

useReducer 和 redux 不同

  • useReducer 是 useState 的代替方案,用于更复杂的 state 变化逻辑

  • useReducer 是单组件的状态管理,多组件通讯还是需要 props 传递数据

  • redux 是全局的状态管理,多组件可共享数据

useMemo

(先回顾一下之前的性能优化部分的知识,借用之前 ppt 和源码)

  • React 默认更新所有子组件

  • Class 组件使用 SCU 或者 PureComponent 进行优化

  • Hooks 里使用 useMemo 缓存数据(和 PureComponent 原理是一样的)

javascript 复制代码
 // 子组件使用 memo()包裹  (对props浅层对比)
 const Child = memo(({ userInfo }) => {
     console.log('Child render ...', userInfo)
     
     return <>
      </>
 })
 ​
 // 父组件 用 useMemo 缓存传递的数据, 有依赖
 const userInfo = useMemo(() => {
     return { name, age = 21 }
 }, [name])
 ​
 <Child userInfo={userInfo}/>

useCallback

在 useMemo 的基础上继续,如果是函数传递给子组件,怎么办?

  • useMemo 缓存数据

  • useCallback 缓存函数

javascript 复制代码
 // 子组件
 const Child = ({ onChange }) => {
     console.log('Child render ...', onChange)
     
     return <>
      </>
 }
 ​
 // 父组件 用 useCallback 缓存传递的函数, 依赖 []
 const onChange = useCallback(e => {
     console.log(e.target.value)
 }, [])
 ​
 <Child onChange={onChange}/>
相关推荐
十铭忘6 小时前
Vue3实现Pixso中的钢笔工具3——梳理函数调用
前端·vue.js
逝水无殇6 小时前
HTML 元素详解
开发语言·前端·html
糖墨夕6 小时前
AI Agent技术栈选择:Vue3 + NestJS + TypeScript 为什么是绝佳组合
前端·nestjs
Java面试题总结6 小时前
区间树:反向映射的前置数据结构
java·前端·数据结构
KaMeidebaby6 小时前
卡梅德生物技术快报|兔单克隆抗体:噬菌体 Fab 免疫文库搭建实操:兔单克隆抗体重组构建完整参数
前端·网络·数据库·人工智能·算法
胡萝卜术14 小时前
从API调用到手写LRU:力扣146「LRU缓存」的哈希表+双向链表终极进化之路
前端·javascript·面试
科技道人14 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
天疆说15 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
李伟_Li慢慢16 小时前
02-从硬件说起WebGL
前端·three.js
kyriewen17 小时前
看了微软几万人用AI编程的数据——效率涨24%的代价没人提
前端·ai编程·claude