У меня есть n
количество компонентов провайдера, которые обеспечивают контекст для моих магазинов MobX:
function App({ children }) {
const owner = createStore(() => OwnerStore);
const OwnerProvider = useProvider(OwnerStoreID);
const cat = createStore(() => CatStore);
const CatProvider = useProvider(CatStoreID);
return (
<OwnerProvider value={owner}>
<CatProvider value={cat}>
{children}
</CatProvider>
</OwnerProvider>
);
}
Однако количество отдельных магазинов в моем приложении на самом деле исчисляется десятками, и я не надену не хочу поддерживать рождественскую елку вложенных провайдеров.
Я пытался написать что-то вроде этого:
const storesConfig = [
{
store: OwnerStoreID,
id: OwnerStoreID,
},
]
export const StoresProvider = ({ children }) => {
const createdStores = storesConfig.map((storeConfig) =>
createStore(() => storeConfig.store)
)
const createdProviders = storesConfig.map((storeConfig) =>
useProvider(storeConfig.id)
)
return createdProviders.reduce((Acc, Cur, index) => {
const child =
index < createdProviders.length ? (
<Cur value={createdStores[index]} />
) : (
<Cur value={createdStores[index]}>{children}</Cur>
)
if (Acc) {
return <Acc value={createdStores[index - 1]}>{child}</Acc>
} else {
return Cur
}
}, null)
}
Однако я столкнулся со многими неразборчивыми ошибками TypeScript. Что я делаю неправильно? Конечно, есть способ рекурсивной сборки дерева компонентов React?