Типа для функции setState хука useState?
Я конвертирую свой проект React в Typescript.
У меня такой кусок состояния:
AdminBlogPostContainer.tsx
const [blogPost,setBlogPost] = useState<null | BLOGPOST>(null);
return(
<AdminBlogPostPage
blogPost={blogPost as BLOGPOST}
setBlogPost={setBlogPost}
/>
);
AdminBlogPostPage.tsx
interface AdminBlogPostPage {
blogPost: BLOGPOST,
setBlogPost: // <---- WHAT SHOULD I USE AS TYPE HERE ?
}
const AdminBlogPostPage: React.FC<AdminBlogPostPage> = (props) => {
console.log("Rendering AdminBlogPostPage...");
return(
// ...
);
};
export default AdminBlogPostPage;
Это сообщение об ошибке:
2 ответа
Решение
Начнем с некоторых соответствующих определений типов из @types/react
.
declare namespace React {
// ...
type SetStateAction<S> = S | ((prevState: S) => S);
// ...
type Dispatch<A> = (value: A) => void;
// ...
function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];
// ...
}
Из этого мы уже можем вывести тип setBlogPost
в заявлении
const [blogPost, setBlogPost] = useState<null | BLOGPOST>(null);
который Dispatch<SetStateAction<null | BLOGPOST>>
, но давайте разберемся, чтобы увидеть, что означает каждая часть.
setBlogPost: (value: null | BLOGPOST | ((prevState: null | BLOGPOST) => null | BLOGPOST)) => void;
Переваривая этот кусок за раз, работая извне вовнутрь, мы получаем следующее объяснение:
setBlogPost: (value: ...) => void
setBlogPost
это функция, которая принимает параметрvalue
и возвращаетсяvoid
.value: null | BLOGPOST | ((prevState: ...) => null | BLOGPOST)
value
либоnull
, аBLOGPOST
, или функция, которая принимает параметрprevState
и возвращаетсяnull
илиBLOGPOST
.prevState: null | BLOGPOST
prevState
либоnull
илиBLOGPOST
.
@cbdeveloper
interface AdminBlogPostPage {
blogPost: BLOGPOST;
setBlogPost: Function; // <---- You may use the Function type here
}