Пытаясь реализовать глобальный контекст в приложении, которое, по-видимому, требует передачи значения, предполагается, что API вернет список организаций в контекст, который можно использовать для отображения и последующих вызовов API.
При попытке добавить <Provider>
в App.tsx приложение жалуется, что значение не было определено, в то время как я высмеиваю ответ API с кодом useEffect()
.
следующим образом :
Типы types/Organisations.ts
export type IOrganisationContextType = {
organisations: IOrganisationContext[] | undefined;
};
export type IOrganisationContext = {
id: string;
name: string;
};
export type ChildrenProps = {
children: React.ReactNode;
};
Контекст contexts/OrganisationContext.tsx
export const OrganisationContext = React.createContext<
IOrganisationContextType
>({} as IOrganisationContextType);
export const OrganisationProvider = ({ children }: ChildrenProps) => {
const [organisations, setOrganisations] = React.useState<
IOrganisationContext[]
>([]);
React.useEffect(() => {
setOrganisations([
{ id: "1", name: "google" },
{ id: "2", name: "stackoverflow" }
]);
}, [organisations]);
return (
<OrganisationContext.Provider value={{ organisations }}>
{children}
</OrganisationContext.Provider>
);
};
Использование App.tsx
const { organisations } = React.useContext(OrganisationContext);
return (
<OrganisationContext.Provider>
{organisations.map(organisation => {
return <li key={organisation.id}>{organisation.name}</li>;
})}
</OrganisationContext.Provider>
);
Выпуск № 1:
Property 'value' is missing in type '{ children: Element[]; }' but required in type 'ProviderProps<IOrganisationContextType>'.
Выпуск № 2:
список не отображается на App.tsx
Codesandbox: https://codesandbox.io/s/frosty-dream-07wtn?file= / src / App.tsx