javascript - Eslint:组件定义缺少组合上下文的显示名称
问题描述
我有一个组合多个上下文提供程序组件并返回一个组合上下文提供程序的函数。我收到一个 eslint 错误:Component definition is missing display name (eslintreact/display-name)
. 如何解决错误?
const providers = [AuthProvider, CartProvider, LocationProvider];
const combineComponents = (...components: FC[]): FC => {
return components.reduce(
(AccumulatedComponents, CurrentComponent) => {
return ({ children }: ComponentProps<FC>): JSX.Element => {
return (
<AccumulatedComponents>
<CurrentComponent>{children}</CurrentComponent>
</AccumulatedComponents>
);
};
},
({ children }) => <>{children}</>
);
};
export const CombinedContextProvider = combineComponents(...providers);
CombinedContextProvider
然后可以App.tsx
通过以下方式使用该组件:
import React from 'react';
const App: React.FC = ({ Component, pageProps }) => {
<CombinedContextProvider>
<Component {...pageProps} />
</CombinedContextProvider>
)};
export default App;
解决方案
根据提到问题是匿名函数的评论,我能够使用以下代码解决错误:
import React, { ComponentProps, FC } from 'react';
import { AuthProvider } from './auth_context';
import { CartProvider } from './cart_context';
import { LocationProvider } from './location_context';
const providers = [AuthProvider, CartProvider, LocationProvider];
const combineComponents = (...components: FC[]): FC => {
return components.reduce(
(AccumulatedComponents, CurrentComponent) => {
return function AccumulateComponents({ children }: ComponentProps<FC>): JSX.Element {
return (
<AccumulatedComponents>
<CurrentComponent>{children}</CurrentComponent>
</AccumulatedComponents>
);
};
},
({ children }) => <>{children}</>,
);
};
export const CombinedContextProvider = combineComponents(...providers);
推荐阅读
- stm32 - STM32L053 + SPI 只在第一个周期工作
- c# - Azure Function ClaimsPrincipal 本地
- firebase - 构建颤振发布android应用程序失败
- hyperledger-fabric - Fabric 1.4.2 -> 2.0 alpha 系统最低硬件要求?
- javascript - 如何在一个函数中组合多个显示分配
- javascript - 用更简单的循环替换递归函数
- yodlee - Yodlee FastLink:postMessages 并非来自 iframe
- python - 为什么我的程序没有生成龙曲线?
- javascript - 我在加载到 javascript 时遇到问题。错误:[弃用] 主线程上的同步 XMLHttpRequest 已弃用
- r - 向重复一行并替换 2 个条目的数据框添加一行