随着 react 应用程序的规模和复杂性不断增长,维护干净、高效和可扩展的代码成为一项挑战。 react 设计模式为常见开发问题提供了经过验证的解决方案,使开发人员能够构建更易于管理和扩展的应用程序。这些模式促进了模块化、代码重用和对最佳实践的遵守,使它们成为任何 react 开发人员的必备工具。
在本指南中,我们将通过实用的方式探索关键的 react 设计模式,例如 容器和表示组件、自定义挂钩和记忆化模式举例说明它们的好处。无论您是初学者还是经验丰富的开发人员,本文都将帮助您了解如何使用这些模式来改进您的工作流程并创建更好的 react 应用程序。
容器和表示组件模式是react中广泛使用的设计方法,它将应用程序逻辑与ui渲染分开。这种分离有助于创建模块化、可重用和可测试的组件,符合关注点分离。
的原则这种划分使您的代码库更易于维护,因为逻辑或 ui 的更改可以独立处理而不会相互影响。
以下是容器和演示组件模式的实现方式:
容器组件
import react, { usestate, useeffect } from "react";
import userlist from "./userlist";
const usercontainer = () => {
const [users, setusers] = usestate([]);
const [loading, setloading] = usestate(true);
useeffect(() => {
fetch("/api/users")
.then((response) => response.json())
.then((data) => {
setusers(data);
setloading(false);
})
.catch(() => setloading(false));
}, []);
return <userlist users={users} loading={loading} />;
};
export default usercontainer;
演示组件
import react from "react";
const userlist = ({ users, loading }) => {
if (loading) return <p>loading...</p>;
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
};
export default userlist;
在此示例中:
这种模式提高了清晰度,减少了代码重复,并简化了测试。对于数据获取和 ui 渲染频繁且复杂的应用程序尤其有用。
自定义 hooks 使您能够封装可重用的逻辑,使您的 react 代码更干净、更模块化。您可以将其提取到挂钩中并在需要的地方使用它,而不是在多个组件之间重复逻辑。这提高了代码的可重用性和可测试性,同时遵守dry(不要重复自己)原则。
自定义挂钩
import { usestate, useeffect } from "react";
const usefetchdata = (url) => {
const [data, setdata] = usestate(null);
const [loading, setloading] = usestate(true);
useeffect(() => {
fetch(url)
.then((res) => res.json())
.then((result) => {
setdata(result);
setloading(false);
});
}, [url]);
return { data, loading };
};
export default usefetchdata;
使用挂钩
import react from "react";
import usefetchdata from "./usefetchdata";
const posts = () => {
const { data: posts, loading } = usefetchdata("/api/posts");
if (loading) return <p>loading...</p>;
return (
<ul>
{posts.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
};
export default posts;
在此示例中,usefetchdata 钩子封装了数据获取逻辑,允许任何组件以最少的样板获取数据。自定义挂钩对于简化代码和确保干净的架构非常有价值。
管理复杂或分组状态时,reducer 模式提供了一种结构化的方法来处理状态转换。它将状态逻辑集中到单个函数中,使状态更新可预测且更易于调试。 react 的 usereducer 钩子非常适合实现这种模式。
系统特点:功能简洁实用。目前互联网上最简洁的企业网站建设系统!原创程序代码。非网络一般下载后修改的代码。更安全。速度快!界面模版分离。原创的分离思路,完全不同于其他方式,不一样的简单感受!搜索引擎优化。做了基础的seo优化。对搜索引擎更友好系统功能关于我们:介绍企业介绍类信息,可自由添加多个介绍栏目!资讯中心:公司或行业资讯类内容展示。可自由添加多个资讯内容!产品展示:支持类别设置,可添加产品图片
0
减速函数
const initialstate = { isauthenticated: false, user: null };
function authreducer(state, action) {
switch (action.type) {
case "login":
return { ...state, isauthenticated: true, user: action.payload };
case "logout":
return initialstate;
default:
return state;
}
}
使用 usereducer 的组件
import react, { usereducer } from "react";
const authcomponent = () => {
const [state, dispatch] = usereducer(authreducer, initialstate);
const login = () => dispatch({ type: "login", payload: { name: "john doe" } });
const logout = () => dispatch({ type: "logout" });
return (
<div>
{state.isauthenticated ? (
<>
<p>welcome, {state.user.name}</p>
<button onclick={logout}>logout</button>
</>
) : (
<button onclick={login}>login</button>
)}
</div>
);
};
export default authcomponent;
在此示例中:
reducer 对于处理可扩展应用程序中复杂的状态逻辑特别有效,可提高状态管理的清晰度和一致性。
provider 模式 利用 react 的 context api 在组件之间共享状态或函数,而无需进行 prop 钻取。它将组件包装在上下文提供程序中,允许深度嵌套的组件访问共享数据。
import react, { createcontext, usestate, usecontext } from "react";
const themecontext = createcontext();
const themeprovider = ({ children }) => {
const [theme, settheme] = usestate("light");
return (
<themecontext.provider value={{ theme, settheme }}>
{children}
</themecontext.provider>
);
};
const usetheme = () => usecontext(themecontext);
export { themeprovider, usetheme };
使用上下文
import react from "react";
import { themeprovider, usetheme } from "./themecontext";
const themetoggle = () => {
const { theme, settheme } = usetheme();
return (
<button onclick={() => settheme(theme === "light" ? "dark" : "light")}>
switch to {theme === "light" ? "dark" : "light"} mode
</button>
);
};
const app = () => (
<themeprovider>
<themetoggle />
</themeprovider>
);
export default app;
高阶组件 (hoc) 是采用组件并返回具有附加功能的新组件的函数。它们允许您在多个组件之间重用逻辑,而无需修改其结构。
const withauth = (component) => (props) => {
const isauthenticated = true; // replace with actual auth logic
return isauthenticated ? <component {...props} /> : <p>please log in</p>;
};
const dashboard = () => <div>welcome to the dashboard</div>;
export default withauth(dashboard);
复合组件模式允许您构建一个具有多个协同工作的子组件的父组件。此模式非常适合创建灵活且可重用的 ui 组件。

import react, { usestate, createcontext, usecontext } from "react";
const tabscontext = createcontext();
const tabs = ({ children }) => {
const [activetab, setactivetab] = usestate(0);
return (
<tabscontext.provider value={{ activetab, setactivetab }}>
{children}
</tabscontext.provider>
);
};
tabs.tab = ({ index, label }) => {
const { activetab, setactivetab } = usecontext(tabscontext);
return (
<button
style={{ fontweight: activetab === index ? "bold" : "normal" }}
onclick={() => setactivetab(index)}
>
{label}
</button>
);
};
tabs.panel = ({ index, children }) => {
const { activetab } = usecontext(tabscontext);
return activetab === index ? <div>{children}</div> : null;
};
// usage
const app = () => (
<tabs>
<tabs.tab index={0} label="tab 1" />
<tabs.tab index={1} label="tab 2" />
<tabs.panel index={0}>content for tab 1</tabs.panel>
<tabs.panel index={1}>content for tab 2</tabs.panel>
</tabs>
);
export default app;
memoization 是一种性能优化技术,可防止 react 中不必要的组件重新渲染或值重新计算。
const expensivecomponent = react.memo(({ value }) => {
console.log("rendered");
return <p>{value}</p>;
});
export default expensivecomponent;
const expensivecalculation = ({ number }) => {
const calculatedvalue = react.usememo(() => number * 2, [number]);
return <p>{calculatedvalue}</p>;
};
export default expensivecalculation;
const Parent = () => {
const handleClick = React.useCallback(() => console.log("Clicked!"), []);
return <Child onClick={handleClick} />;
};
const Child = React.memo(({ onClick }) => <button onClick={onClick}>Click</button>);
记忆化提高了涉及大型数据集或复杂 ui 更新的场景中的性能,确保 react 应用程序保持响应能力。
掌握react 设计模式是构建可扩展、可维护且高效的应用程序的关键。通过应用 容器和演示组件、自定义 hooks 和 memoization 等模式,您可以简化开发、提高代码可重用性并增强性能。 高阶组件、复合组件和提供者模式等高级模式进一步简化了复杂的状态管理和组件交互。
这些模式不仅仅是理论上的,它们解决了 react 开发中的现实挑战,帮助您编写干净且模块化的代码。开始将这些模式合并到您的项目中,以创建健壮、易于扩展且可长期维护的应用程序。借助工具包中的 react 设计模式,您将能够更好地处理任何项目,无论多么复杂。
如需更多见解,请查看 patterns.dev 上的 react 设计模式文档。
以上就是React 设计模式:可扩展应用程序的最佳实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号