如果您已经进入 React 世界一段时间,您可能听说过“这只是 JavaScript”这句话。虽然这是事实,但这并不意味着我们不能从一些经过验证的模式中受益,使我们的 React 应用程序更易于维护、可重用并且使用起来更加愉快。让我们深入研究一些基本的设计模式,这些模式可以让你的 React 组件从“meh”到“marvelous”!
在我们开始之前,让我们解决房间里的大象:为什么要费心设计模式呢?好吧,我的 React 爱好者同胞,设计模式就像编码世界的秘方。它们是针对常见问题的经过实战检验的解决方案,可以:
现在我们已经达成共识,让我们探索一些模式,让您的 React 组件比刚打蜡的跑车更加闪亮!
React 的组件模型本身就已经是一个强大的模式,但通过组合更进一步可以带来更灵活和可重用的代码。
// Instead of this: const Button = ({ label, icon, onClick }) => ( ); // Consider this: const Button = ({ children, onClick }) => ( ); const IconButton = ({ icon, label }) => ( );
为什么它很棒:
专业提示:将您的组件视为乐高积木。它们的模块化程度和可组合性越强,您可以构建的结构就越令人惊叹!
此模式将组件的逻辑与其表示分离,使其更容易推理和测试。
// Container Component const UserListContainer = () => { const [users, setUsers] = useState([]); useEffect(() => { fetchUsers().then(setUsers); }, []); return; }; // Presentational Component const UserList = ({ users }) => (
为何如此震撼:
记住:容器就像戏剧的后台工作人员,处理所有幕后工作,而演示组件是演员,只专注于为观众提供好看的外观。
HOC 是接受组件并返回带有一些附加功能的新组件的函数。它们就像您组件的电源!
const withLoader = (WrappedComponent) => { return ({ isLoading, ...props }) => { if (isLoading) { return; } return ; }; }; const EnhancedUserList = withLoader(UserList);
为什么很酷:
警告:虽然 HOC 很强大,但如果过度使用,它们可能会导致“包装地狱”。明智地使用它们!
此模式涉及将函数作为 props 传递给组件,让您可以更好地控制渲染的内容。
const MouseTracker = ({ render }) => { const [position, setPosition] = useState({ x: 0, y: 0 }); const handleMouseMove = (event) => { setPosition({ x: event.clientX, y: event.clientY }); }; return ({render(position)}); }; // Usage( The mouse is at ({x}, {y})
)} />
为什么它很漂亮:
有趣的事实:渲染道具模式非常灵活,它甚至可以实现我们讨论过的大多数其他模式!
钩子是 React 中的新成员,自定义钩子允许您将组件逻辑提取到可重用函数中。
const useWindowSize = () => { const [size, setSize] = useState({ width: 0, height: 0 }); useEffect(() => { const handleResize = () => { setSize({ width: window.innerWidth, height: window.innerHeight }); }; window.addEventListener('resize', handleResize); handleResize(); // Set initial size return () => window.removeEventListener('resize', handleResize); }, []); return size; }; // Usage const MyComponent = () => { const { width, height } = useWindowSize(); returnWindow size: {width} x {height}; };
为何如此神奇:
专业提示:如果您发现自己在多个组件中重复类似的逻辑,那么可能是时候将其提取到自定义挂钩中了!
React 中的设计模式就像一条装满小工具的实用腰带 - 无论您的应用程序给您带来什么挑战,它们都会为您提供适合工作的工具。记住:
通过将这些模式合并到你的 React 工具包中,你将能够很好地创建更多可维护、可重用和优雅的组件。当你未来的自己(和你的队友)轻松浏览你结构良好的代码库时,他们会感谢你!
编码愉快!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3