Sim*_*nti 6 generics typescript reactjs react-context
我们如何在 React.CreateContext 中使用泛型?
我有这个:
interface Props {
}
export interface SearchContextProps {
dtos: any[];
}
export const SearchContext = React.createContext<SearchContextProps>({
dtos: []
});
const SearchPage: React.FunctionComponent<Props> = (props) => {
const [dtos, setDtos] = React.useState<any[]>([]);
const searchContext = {
dtos: dtos
};
return (
<SearchContext.Provider value={searchContext}>
...
</SearchContext.Provider>
);
}
export default SearchPage;
Run Code Online (Sandbox Code Playgroud)
现在我想使用泛型,所以我会写这样的内容:
interface Props<T> {
}
export interface SearchContextProps<T> {
dtos: T[];
}
export const SearchContext = React.createContext<SearchContextProps<T>>({
dtos: []
});
const SearchPage = <T extends object>(props: Props<T>) => {
const [dtos, setDtos] = React.useState<T[]>([]);
const searchContext = {
dtos: dtos
};
return (
<SearchContext.Provider value={searchContext}>
...
</SearchContext.Provider>
);
}
export default SearchPage;
Run Code Online (Sandbox Code Playgroud)
但我不知道如何才能开始工作:
export const SearchContext = React.createContext<SearchContextProps<T>>({
Run Code Online (Sandbox Code Playgroud)
我如何在这里使用泛型,我如何访问 T?
我尝试在组件内移动上下文:
interface Props<T> {
}
export interface SearchContextProps<T> {
dtos: T[];
}
const SearchPage = <T extends object>(props: Props<T>) => {
const [dtos, setDtos] = React.useState<T[]>([]);
const SearchContext = React.createContext<SearchContextProps<T>>({
dtos: [],
});
const searchContext = {
dtos: dtos,
};
return (
<SearchContext.Provider value={searchContext}>
...
</SearchContext.Provider>
);
}
export default SearchPage;
Run Code Online (Sandbox Code Playgroud)
但现在我不知道如何导出它。
有什么帮助吗?
我最终得到:
import * as React from 'react';
interface Props<T> {}
export interface SearchContextProps<T> {
dtos: T[];
}
export const SearchContext = React.createContext<SearchContextProps<any>>({
dtos: [],
});
const SearchPage = <T extends object>(props: React.PropsWithChildren<Props<T>>) => {
const [dtos, setDtos] = React.useState<T[]>([]);
const searchContext = {
dtos: dtos,
};
return <SearchContext.Provider value={searchContext}>...</SearchContext.Provider>;
};
export default SearchPage;
Run Code Online (Sandbox Code Playgroud)
而消费者
const searchContext = React.useContext<SearchContextProps<Interfaces.FileDto>>(SearchContext)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4929 次 |
| 最近记录: |