当前位置: 首页 > news >正文

React逻辑复用的方式都有哪些

在日常开发中,能够优雅的复用组件和逻辑,是优秀开发者的职责。在react中,复用逻辑的方式有很多,可以适用于不同的业务场景。今天说三个比较有代表性的,Render Props、HOC、Hooks

Render Props

创建一个接受函数作为其子组件的prop的组件,该函数返回一个React元素。通过这种方式,父组件可以通过传递不同的函数来重用相同的逻辑。

示例代码:

function DataFetcher({ url, children }) {const [data, setData] = useState(null);useEffect(() => {fetch(url).then(response => response.json()).then(data => setData(data)).catch(error => console.error('Error fetching data: ', error));}, [url]);return children(data);
}function DisplayData() {return (<DataFetcher url="https://api.example.com/data">{data => (<div>{data ? (<ul>{data.map(item => (<li key={item.id}>{item.name}</li>))}</ul>) : (<p>Loading...</p>)}</div>)}</DataFetcher>);
}

在上面的例子中,DataFetcher组件通过children prop接受一个函数,并将获取到的数据作为参数传递给该函数,DisplayData组件通过传递一个函数来获取并渲染数据。

Higher-Order Components (HOC) 高阶函数

高阶组件是一个函数,接受一个组件作为参数并返回一个新的增强组件。

示例代码:

function withDataFetching(WrappedComponent, url) {return function DataFetchingComponent(props) {const [data, setData] = useState(null);useEffect(() => {fetch(url).then(response => response.json()).then(data => setData(data)).catch(error => console.error('Error fetching data: ', error));}, [url]);return <WrappedComponent {...props} data={data} />;};
}function DisplayData({ data }) {return (<div>{data ? (<ul>{data.map(item => (<li key={item.id}>{item.name}</li>))}</ul>) : (<p>Loading...</p>)}</div>);
}const DisplayDataWithFetching = withDataFetching(DisplayData, 'https://api.example.com/data');

在上面的例子中,withDataFetching函数接受一个组件和一个URL作为参数,并返回一个新的组件,在新组件内部进行数据获取并传递给被包裹的组件。

Hooks

自定义Hooks允许你在函数组件中重用状态逻辑。通过将逻辑封装在自定义Hook中,可以在不同的组件中复用它。

示例代码:

function useDataFetching(url) {const [data, setData] = useState(null);useEffect(() => {fetch(url).then(response => response.json()).then(data => setData(data)).catch(error => console.error('Error fetching data: ', error));}, [url]);return data;
}function DisplayData() {const data = useDataFetching('https://api.example.com/data');return (<div>{data ? (<ul>{data.map(item => (<li key={item.id}>{item.name}</li>))}</ul>) : (<p>Loading...</p>)}</div>);
}

在上面的例子中,useDataFetching自定义Hook封装了数据获取逻辑,DisplayData组件通过调用该Hook获取数据并渲染。

这些方法提供了灵活的方式来在React中实现逻辑复用,具体选择取决于项目中具体的业务场景和开发团队的偏好。

http://www.lryc.cn/news/379614.html

相关文章:

  • 【LinuxC语言】线程重入
  • 【Streamlit学习笔记】Streamlit-ECharts箱型图添加均值和最值label
  • Docker镜像仓库:存储与分发Docker镜像的中央仓库
  • FreeRTOS必考面试题及参考答案
  • 面试题2:从浏览器输入一个URL,到最终展示前端页面这一过程,会发生什么?
  • <Rust><iced><resvg>基于rust使用iced构建GUI实例:使用resvg库实现svg转png
  • 面试突击:Java 中的泛型
  • 3_2、MFC常用控件用法:组合框、滚动条和图片控件
  • 如何使用gprof对程序进行性能分析
  • 四川汇聚荣科技有限公司靠谱吗?
  • 可灵王炸更新,图生视频、视频续写,最长可达3分钟!Runway 不香了 ...
  • oracle中使用临时表GLOBAL TEMPORARY TABLE
  • Gradio入门—快速开始
  • AOP应用之系统操作日志
  • 海外云手机自动化管理,高效省力解决方案
  • 后仿真中的 《specify/endspecify block》之(5)使用specify进行时序仿真
  • win10/11磁盘管理
  • 【昇思初学入门】第四天打卡
  • 禁用/屏蔽 Chrome 默认快捷键
  • 移动端+PC端应用模式的智慧城管综合执法办案平台源码,案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析
  • AI音乐大模型时代:版权归属与创意产业的新生长点
  • C++函数作为参数
  • 考前刷题练手感(北航期末往年数据结构编程题)
  • Android记录9--实现转盘效果
  • 【Oracle APEX开发小技巧1】转换类型实现显示小数点前的 0 以 及常见类型转换
  • GRIT论文阅读笔记
  • 1980python个性化电影推荐管理系统mysql数据库Django结构layUI布局elasticsearch存储计算机软件工程网页
  • 基于IDEA的Maven(依赖介绍和引用)
  • pytest测试框架pytest-sugar插件生成进度条
  • 若依框架集成微信支付