【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
  • 管理和注入状态

相关内容

热门资讯

一分钟了解!九九联盟辅助在,多... 一分钟了解!九九联盟辅助在,多乐辅助app,详细教程(有挂工具);人气非常高,ai更新快且高清可以动...
教学盘点“情怀国粹麻将神器”解... 您好,情怀国粹麻将神器这款游戏可以开挂的,确实是有挂的,需要了解加微【485275054】很多玩家在...
一分钟揭秘!星悦软件辅助,微乐... 一分钟揭秘!星悦软件辅助,微乐山西脚本插件,新版2025教程(有挂方略);1、这是跨平台的微乐山西脚...
分享开挂内幕“海豹大厅超级三加... 分享开挂内幕“海豹大厅超级三加一辅助”讲解开挂作弊辅助插件(原来存在有挂);1、完成海豹大厅超级三加...
我来分享!手机辅助脚本工具,瓜... 我来分享!手机辅助脚本工具,瓜瓜丰城双剑旧版攻略,扑克教程(的确有挂);1.瓜瓜丰城双剑旧版攻略 a...
玩家攻略推荐“哈局八张挂辅助”... 玩家攻略推荐“哈局八张挂辅助”普及开挂作弊辅助神器(往昔真的是有挂);哈局八张挂辅助简单的灵活控制,...
分享认知!宝宝游戏浙江辅助器,... 分享认知!宝宝游戏浙江辅助器,微乐广西麻辣辅助器,新版2025教程(讲解有挂);1、不需要AI权限,...
程序员教你“欢乐达人葫芦鱼辅助... 程序员教你“欢乐达人葫芦鱼辅助”解谜开挂作弊辅助器(原先真的有挂)相信很多朋友都在电脑上玩过欢乐达人...
揭秘攻略!欢乐达人透视脚本,网... 揭秘攻略!欢乐达人透视脚本,网易游戏辅助工具,细节揭秘(有挂攻略);1、【欢乐达人透视脚本辅助软件】...
玩家必看分享“途游辅助官网”讲... 玩家必看分享“途游辅助官网”讲解开挂作弊辅助助手(竟然有挂);1、AI玩家辅助神器收集数据:讲大量的...