稀土掘金技术社区 01月06日
热门组件库都在使用的usePropsValue怎么写
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了React组件中受控与非受控的概念,以及如何利用`usePropsValue` Hook来优雅地处理组件的状态管理。文章首先解释了受控组件和非受控组件的区别,强调了在组件开发中理解这些概念的重要性。接着,文章详细介绍了`usePropsValue` Hook的设计思路和实现方法,展示了如何通过该Hook实现组件在受控和非受控模式之间的灵活切换,并给出了一个简单的实现示例。最后,文章还讨论了如何优化`usePropsValue` Hook,并给出了一个结合`Switch`组件的实际应用案例。总的来说,本文旨在帮助开发者更好地理解和运用React中的状态管理模式,提高组件的可维护性和复用性。

🎛️**受控与非受控概念**:受控组件的状态由React代码管理,而非受控组件的状态则由DOM自身管理。理解两者的区别对于编写高效的React组件至关重要。

💡**usePropsValue Hook**:`usePropsValue` Hook的出现是为了解决组件需要在受控和非受控模式之间切换的问题。它通过接收`value`、`defaultValue`和`onChange`三个参数,自动判断组件当前的状态管理模式。

⚙️**usePropsValue实现原理**:`usePropsValue` Hook内部使用`useRef`来存储组件的状态,并根据传入的参数来决定是否更新状态。当只传入`defaultValue`时,组件处于非受控模式;当同时传入`value`和`onChange`时,组件处于受控模式。同时,为了触发组件的更新渲染,使用了ahooks的`useUpdate`。

⚡️**性能优化**:为了避免不必要的重新渲染,文章建议使用`useCallback`或`useMemoizedFn`来包裹`setState`函数,以确保函数的引用稳定。

🧩**组件实例**:文章给出了一个结合`Switch`组件的实际应用案例,展示了如何使用`usePropsValue` Hook来简化组件的状态管理,并提高代码的可维护性。

原创 Youngzx 2025-01-05 09:03 重庆

点击关注公众号,“技术干货”及时达!


点击关注公众号,“技术干货” 及时达!

1、受控和非受控

大家可能经常会封装一些组件,纯UI组件也好,业务组件也好,但是不能脱离受控非受控的概念去写组件,这样很容易写出渲染次数过多的组件

1.1、受控

1.2、非受控

1.3、理解这个对写组件有什么帮助?

1.4、什么是usePropsValue?

2、usePropsValue编写思路

3、编写一个简单的usePropsValue

4、优化方案

    「避免不必要的重新渲染」:如果 setState 函数在每次渲染时都被重新创建,那么它的引用就会发生变化,可能会导致依赖它的子组件或 useEffect 钩子重新执行,这可能会引发不必要的重新渲染或副作用。而使用 useMemoizedFn 可以确保函数的引用是稳定的,除非其依赖项发生变化。

    「性能优化」:在某些场景下,函数可能会被频繁调用。如果每次都重新创建函数对象可能会增加内存和性能开销。使用 useMemoizedFn 可以减少这类开销。

    「稳定的回调函数」:在某些情况下,组件可能会传递 setState 给子组件或其他钩子。如果这些子组件或钩子依赖于稳定的回调函数,那么使用 useMemoizedFn 就可以确保它们收到的始终是同一个函数实例,避免因为函数引用变化而导致的不必要更新。

5、结合组件实现

6、总结

点击关注公众号,“技术干货” 及时达!

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

React 受控组件 非受控组件 usePropsValue Hooks
相关文章