Files
jrshikoku/lib/providerTreeProvider.tsx

27 lines
940 B
TypeScript

import React, { ComponentType, ReactNode } from "react";
type Provider = ComponentType<{ children: ReactNode }>;
export const buildProvidersTree = (providers: Provider[]): Provider => {
if (!providers || providers.length === 0) {
throw new Error("ContextProviderが不足しています");
}
// 基本ケース:ContextProviderが1つしか残っていない場合、それを返して終了する
if (providers.length === 1) {
return providers[0];
}
// 配列から最初の2つのContextProviderを取り出す
const [FirstProvider, SecondProvider, ...restProviders] = providers;
// 最初の2つのContextProviderをネストした新しいContextProviderを作成し、再帰する
const CombinedProvider: Provider = ({ children }) => (
<FirstProvider>
<SecondProvider>{children}</SecondProvider>
</FirstProvider>
);
return buildProvidersTree([CombinedProvider, ...restProviders]);
};