Nhập hàm setState của hook useState?
Tôi đang chuyển đổi dự án React của mình thành Typescript.
Tôi có phần trạng thái này:
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;
Đây là thông báo lỗi:
Trả lời
Hãy bắt đầu với một số định nghĩa loại có liên quan từ @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>>];
// ...
}
Từ điều này, chúng ta đã có thể suy ra loại setBlogPosttrong câu lệnh
const [blogPost, setBlogPost] = useState<null | BLOGPOST>(null);
đó là Dispatch<SetStateAction<null | BLOGPOST>>, nhưng hãy chia nhỏ điều đó để xem ý nghĩa của từng phần.
setBlogPost: (value: null | BLOGPOST | ((prevState: null | BLOGPOST) => null | BLOGPOST)) => void;
Giải thích từng phần một khi làm việc từ bên ngoài vào trong, chúng tôi nhận được lời giải thích sau:
setBlogPost: (value: ...) => voidsetBlogPostlà một hàm chấp nhận một tham sốvaluevà trả vềvoid.value: null | BLOGPOST | ((prevState: ...) => null | BLOGPOST)valuelànull, aBLOGPOST, hoặc một hàm chấp nhận một tham sốprevStatevà trả vềnullhoặc aBLOGPOST.prevState: null | BLOGPOSTprevStatelà một trong hainullhoặc aBLOGPOST.