reactjs - Hvordan korrekt skrive typer på children i React Context
I prosjektet lager jeg en React Context og jeg vil typisere barna riktig, men dessverre aksepteres kun typen "any" i codesandbox. Kan du se på det og foreslå hvilken type det bør være? Jeg vil gjerne unngå typen "any".
Slik blir Context.Provider implementert
const App = () => {
return (
<BrowserRouter>
<PostsContextProvider>
<HeaderComponent />
<ButtonsNavigation />
<Routing />
</PostsContextProvider>
<DownBar />
</BrowserRouter>
);
};
export default App;
Og her er Context-komponenten
interface PostsContextValues {
posts: PostType[];
}
export const PostsContext = createContext<PostsContextValues>({
posts: []
});
export const PostsContextProvider = ({ children }: any) => {
const value = useMemo(
() => ({
posts: data
}),
[data]
);
return (
<PostsContext.Provider value={value}>{children}</PostsContext.Provider>
);
};
takk !
Svar #1
Du kan spesifisere typen på children-propen i PostsContextProvider-komponenten slik:
export const PostsContextProvider = ({ children }: { children: React.ReactNode }) => {
const value = useMemo(
() => ({
posts: data
}),
[data]
);
return (
<PostsContext.Provider value={value}>{children}</PostsContext.Provider>
);
};
Her er children-propen av typen React.ReactNode, som representerer en React-node (f.eks. et element, tekst eller fragment). Dette er en fleksibel type som tillater at hvilken som helst type barn kan sendes til PostsContextProvider-komponenten.
Hvis du vil være mer spesifikk om typen barn som kan sendes, kan du lage et grensesnitt eller en type som representerer formen på barna og bruke det i stedet for React.ReactNode. For eksempel:
interface PostsContextProviderProps {
children: JSX.Element | JSX.Element[]
}
export const PostsContextProvider = ({ children }: PostsContextProviderProps) => {
// ...
};
Dette ville bare tillate at JSX-elementer eller et array av JSX-elementer blir sendt som children til PostsContextProvider-komponenten.
