【React】常见的 HOC 使用案例
创始人
2024-11-12 19:08:18
0

高阶组件(Higher-Order Component,HOC)是一种用于在 React 中复用组件逻辑的技术。以下是几个常见的 HOC 使用案例,以及详细的代码示例。

1. 日志记录 HOC

这个高阶组件将在每次组件更新时记录日志。

LoggingHOC.js
import React from 'react';  const withLogging = (WrappedComponent) => {   return class extends React.Component {     componentDidMount() {       console.log(`${WrappedComponent.name} mounted`);     }      componentDidUpdate() {       console.log(`${WrappedComponent.name} updated`);     }      componentWillUnmount() {       console.log(`${WrappedComponent.name} will unmount`);     }      render() {       return ...this.props} />;     }   }; };  export default withLogging; 
使用日志记录 HOC
// src/App.js import React from 'react'; import withLogging from './LoggingHOC';  const MyComponent = () => {   return 
My Component
; }; const LoggedMyComponent = withLogging(MyComponent); const App = () => { return (
); }; export default App;

2. 数据获取 HOC

这个高阶组件在组件挂载时从一个 API 获取数据,并将数据传递给被包装的组件。

FetchDataHOC.js
import React from 'react';  const withFetchData = (url) => (WrappedComponent) => {   return class extends React.Component {     state = {       data: null,       loading: true,       error: null,     };      async componentDidMount() {       try {         const response = await fetch(url);         const data = await response.json();         this.setState({ data, loading: false });       } catch (error) {         this.setState({ error, loading: false });       }     }      render() {       const { data, loading, error } = this.state;       return data} loading={loading} error={error} {...this.props} />;     }   }; };  export default withFetchData; 
使用数据获取 HOC
// src/App.js import React from 'react'; import withFetchData from './FetchDataHOC';  const DataComponent = ({ data, loading, error }) => {   if (loading) return 
Loading...
; if (error) return
Error: {error.message}
; return
Data: {JSON.stringify(data)}
; }; const FetchDataComponent = withFetchData('https://api.example.com/data')(DataComponent); const App = () => { return (
); }; export default App;

3. 权限控制 HOC

这个高阶组件根据用户权限来控制组件的渲染。

withAuthorization.js
import React from 'react';  const withAuthorization = (requiredRole) => (WrappedComponent) => {   return class extends React.Component {     render() {       const { user } = this.props;       if (user.role !== requiredRole) {         return 
You do not have permission to view this page
; } return ...this.props} />; } }; }; export default withAuthorization;
使用权限控制 HOC
// src/App.js import React from 'react'; import withAuthorization from './withAuthorization';  const AdminPage = () => {   return 
Admin Page
; }; const AuthorizedAdminPage = withAuthorization('admin')(AdminPage); const App = () => { const user = { role: 'user' }; // change to 'admin' to see the page return (
user} />
); }; export default App;

4. 动态样式 HOC

这个高阶组件根据 props 动态添加样式。

withDynamicStyles.js
import React from 'react';  const withDynamicStyles = (WrappedComponent) => {   return class extends React.Component {     render() {       const style = {         color: this.props.color || 'black',         fontSize: this.props.fontSize || '16px',       };       return ...this.props} style={style} />;     }   }; };  export default withDynamicStyles; 
使用动态样式 HOC
// src/App.js import React from 'react'; import withDynamicStyles from './withDynamicStyles';  const StyledComponent = ({ style }) => {   return 
style}>Styled Component
; }; const DynamicStyledComponent = withDynamicStyles(StyledComponent); const App = () => { return (
); }; export default App;

总结

高阶组件是一种强大的模式,可以在 React 中实现代码复用和逻辑抽象。通过高阶组件,你可以:

  • 提取和重用跨组件的逻辑
  • 控制组件的渲染
  • 操作传递给组件的 props
  • 管理和注入状态

相关内容

热门资讯

机巧辅助!大咖娱乐挂脚本(辅助... 您好,大咖娱乐挂脚本这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩家...
教材辅助!海米大厅辅助(辅助挂... 教材辅助!海米大厅辅助(辅助挂)好像真的是有辅助技巧(有挂技巧)1、不需要AI权限,帮助你快速的进行...
秘籍辅助!关春天开挂(辅助挂)... 您好,关春天开挂这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩家在这...
攻略辅助!威信茶馆透视器(辅助... 攻略辅助!威信茶馆透视器(辅助挂)好像存在有辅助app(存在有挂)1、首先打开威信茶馆透视器辅助器下...
教程书辅助!潮汕木虱有辅助挂吗... 教程书辅助!潮汕木虱有辅助挂吗(辅助挂)确实真的有辅助教程(有挂分析)小薇(辅助器软件下载)致您一封...
教材辅助!广东雀神祈福真的有用... 教材辅助!广东雀神祈福真的有用吗(辅助挂)都是真的有辅助器(发现有挂)1、让任何用户在无需广东雀神祈...
模块辅助!微信小游戏辅助器(辅... 您好,微信小游戏辅助器这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩...
妙招辅助!小程序牵手跑得快辅助... 妙招辅助!小程序牵手跑得快辅助器(辅助挂)其实存在有辅助器(有挂方式)1、小程序牵手跑得快辅助器脚本...
讲义辅助!同乡游有辅助软件吗(... 讲义辅助!同乡游有辅助软件吗(辅助挂)原来是真的有辅助挂(有挂技巧)1、游戏颠覆性的策略玩法,独创攻...
妙计辅助!哈局辅助作必弊(辅助... 妙计辅助!哈局辅助作必弊(辅助挂)本来存在有辅助app(有挂技巧)1)哈局辅助作必弊免费钻石:进一步...