0
点赞
收藏
分享

微信扫一扫

React 其他 Hooks

花海书香 2024-05-30 阅读 39

其他 Hooks

useRef

可用于获取 DOM 元素

 const ScrollRef = useRef(null)
 ScrollRef.current

useContext

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

Hooks 中使用 useContext获取 context 的值

 // 父组件创建 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 不同

useMemo

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

 // 子组件使用 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 的基础上继续,如果是函数传递给子组件,怎么办?

 // 子组件
 const Child = ({ onChange }) => {
  console.log('Child render ...', onChange)
     
     return <>
      </>
 }
 ​
 // 父组件 用 useCallback 缓存传递的函数, 依赖 []
 const onChange = useCallback(e => {
  console.log(e.target.value)
 }, [])
 ​
 <Child onChange={onChange}/>
举报

相关推荐

0 条评论