Reactjs 自组织抽象层

Reactjs 自组织抽象层,reactjs,Reactjs,我得为工作做大量的重写。其中一部分是一个已经改变的api。它是由一个临时组织提供的。我计划只编写一个抽象层,而不是将它的每个实例都重写为新的api。因此,withOldHoC将使用NewHoc为旧api提供新功能 代码看起来像这样 import React from "react"; import { withTracker } from "@SomeCompany/react-tracker"; let withTracking = ComponentToTrack => {

我得为工作做大量的重写。其中一部分是一个已经改变的api。它是由一个临时组织提供的。我计划只编写一个抽象层,而不是将它的每个实例都重写为新的api。因此,withOldHoC将使用NewHoc为旧api提供新功能

代码看起来像这样

  import React from "react";
import { withTracker } from "@SomeCompany/react-tracker";

let withTracking = ComponentToTrack => {
  return props => {
    return <ComponentToTrack {...props} tracking={props.tracker} />;
  };
};

export default withTracker(withTracking);

我知道这是错误的。关于你们中的任何一个人将如何写这篇文章的想法?

这样做的一个选项是使用上下文。如果您的应用程序正在使用功能组件,您可以创建一个包装路由器的上下文提供程序,并使用组件上的挂钩访问它

import { useContext, createContext } from 'react'

export const ApiContext = createContext({
  api: {
     ...your api schema here     
  }
})

export const useApi = () => useContext(ApiContext)

然后就可以很容易地导入钩子并使用api调用了

,我可以利用它来看看。谢谢你需要把你的路由器包起来。如果你有任何问题,请告诉我。还记得检查关于上下文和挂钩的React文档,如果它解决了您的问题,则标记为解决方案:Hrm。我仍然需要访问跟踪器道具,以便将其转换为跟踪。将不会在上下文创建步骤中使用该选项:还可以考虑使用一个像RADIL这样的库来处理在组件开始渲染之前需要调用的所有调用。比使用useEffect或ComponentDidMount更干净。祝你好运对跟踪进行同样的操作。在Api上下文之上创建一个跟踪上下文,这样您的Api层就可以看到您的跟踪层,而不是相反。这被称为分层duh,它对于避免依赖性非常有用;