首页 > 其他分享 >如何编写难以维护的React代码?耦合组件

如何编写难以维护的React代码?耦合组件

时间:2023-07-27 12:44:05浏览次数:58  
标签:... const 代码 React 耦合 useState 组件

如何编写难以维护的React代码?耦合组件

在许多项目中,我们经常会遇到一些难以维护的React代码。其中一种常见的情况是:子组件直接操作父组件方法,从而导致父子组件深度耦合。这样的实现让子组件过于依赖父组件的具体实现细节,使得代码难以维护和扩展。
让我们来看一个例子:

function ComponentA() {
  const [filter, setFilter] = useState({});
  const [pageIndex, setPageIndex] = useState(0);
  const [pageSize, setPageSize] = useState(20);
  /*...*/

  return (
    <>
      <Filter
        filter={filter}
        setFilter={setFilter}
        setPageIndex={setPageIndex}
      />
      {/*...*/}
      <Pagination
        pageIndex={pageIndex}
        pageSize={pageSize}
        setPageIndex={setPageIndex}
        setPageSize={setPageSize}
      />
    </>
  );
}

为了改善这种情况,我们可以采用一种更灵活和解耦的方式:

function ComponentA() {
  const [filter, setFilter] = useState({});
  const [pageIndex, setPageIndex] = useState(0);
  const [pageSize, setPageSize] = useState(20);
  /*...*/

  return (
    <>
      <Filter
        filter={filter}
        onChange={({fieldA, fieldB}) => {
          setFilter(prev => ({ ...prev, fieldA, fieldB }));
          setPageIndex(0);
        }}
      />
      {/*...*/}
      <Pagination
        pageIndex={pageIndex}
        pageSize={pageSize}
        onChange={({ pageIndex, pageSize }) => {
          setPageIndex(pageIndex);
          setPageSize(pageSize);
        }}
      />
    </>
  );
}

在上面的代码中,我们优化了子组件与父组件之间的通信方式,使其更加灵活和解耦。现在,子组件只负责发布事件,而不关心父组件具体有哪些方法。父组件通过订阅这些事件来处理业务逻辑,这样一来,父组件可以自由选择如何处理这些事件,而子组件则不需要关心这些细节。

通过这种方式,我们实现了父子组件之间的解耦,使代码更易于维护和扩展。子组件不再依赖于父组件的具体实现细节,而是通过发布事件来与父组件进行通信。这样的代码结构使得我们可以更加灵活地对子组件和父组件进行修改和优化,而不会影响到彼此的功能。这对于大型项目和团队协作非常有益,因为不同的团队成员可以独立开发和测试不同的组件,而不用担心彼此的实现会产生冲突。

在编写React代码时,我们应该始终考虑代码的可维护性和扩展性。避免过度依赖父组件的具体实现细节是一个很好的实践,让组件之间保持解耦,能够有效地提高代码质量和开发效率。

标签:...,const,代码,React,耦合,useState,组件
From: https://www.cnblogs.com/forzhaokang/p/17583256.html

相关文章

  • react antd5 Warning: Each child in a list should have a unique "key" prop.
    Warning:Eachchildinalistshouldhaveaunique"key"prop.说明:表格数据赋值给一个key值<Tablecolumns={columns}dataSource={data.map((item)=>({...item,key:item.id}))}/>......
  • vue--day46---组件自定义事件的解绑
    查看vue版本命令npmlistvue1.App.vue<template><div><h1>{{msg}}</h1><!--通过父组件给子组件传递函数的props实现子给父传数据--><School:receiveSchoolName="receiveSchoolName"></School><!--v-on在student组件标签上所以说是在给......
  • IfcModulusOfRotationalSubgradeReactionSelect
    IfcModulusOfRotationalSubgradeReactionSelect 类型定义 Ameasureformodulusofrotationalsubgradereactionwhichexpressestherotationalbeddingofastructuralcurveitemperlength.TRUEdenotesinfinitestiffness(rigidity).FALSEdenotesnostiffn......
  • Android应用程序主要组件知识小结
    Android系统中通过几个主要的组件以其灵活的组织方式在方便了开发者的同时,也不失其炫丽的效果,实在是值得我不断深入了解和学习,下面的图作为近一段时间对Android组件知识的一个小结,难免有遗漏或错误之处,敬请各位不吝赐教。我觉得深刻理解和掌握这几个组件的使用方法以及相互关系,就......
  • Hive架构组件
    架构图Hive组件......
  • 反应式编程 (Reactive programming)
    反应式编程(Reactiveprogramming,Rx)最初来源于函数式语言里面的函数式反应编程(FunctionalReactiveprogramming,FRP)。后来随着微软.NetFramework增加了ReactiveExtension而在主流语言中流行起来。反应式编程是一种编程思想、编程方式,是为了简化并发编程而出现的。与传统的处......
  • Vue3 组件篇
    组件命名组件的命名一般分为两种在单文件组件中,推荐为子组件使用PascalCase的标签名,以此来和原生的HTML元素作区分。虽然原生HTML标签名是不区分大小写的,但Vue单文件组件是可以在编译中区分大小写的。我们也可以使用/>来关闭一个标签。使用kebab-case形式并显式地......
  • 在疯狂的前端世界,为什么选择学习React
    题图| https://github.com/react-icons/react-iconsReactNative和Prettier的作者之一、前端大牛、Twitter大V@Vjeux(ChristopherChedeau)建议前端人都来学习下React,他给出的理由是:“React和其他库的不同之处在于,它可以教会你一些概念,这些概念可以在你的开发生涯中反复使用。......
  • DevExpress WPF Tree List组件,让数据可视化程度更高!(一)
    DevExpressWPFTreeList组件是一个功能齐全、数据感知的TreeView-ListView混合体,可以把数据信息显示为REE、GRID或两者的组合,在数据绑定或非绑定模式下,具有完整的数据编辑支持。DevExpressWPF 拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过......
  • 高性能、高扩展、高稳定:解读 EasyMR 大数据组件自定义可扩展能力
    随着互联网技术的不断发展以及大数据时代的兴起,企业对于数据分析和洞察的需求日益增长。大多数企业都积累了大量的数据,需要从这些数据中快速灵活地提取有价值的信息,以便为用户提供更好的服务或者帮助企业做出更明智的决策。然而在不同的数据场景中,企业往往会选择不同的大数据组件......