reactjs - 如何使用 react 和 typescript 修复 boolean 或 undefined 类型的错误参数?
问题描述
我收到错误
“布尔类型或未定义的参数不能分配给布尔类型的参数。未定义类型不能分配给布尔类型”
当我将道具从孩子传递到下面的使用挂钩时,
下面是我的代码,
function Parent() {
const [isDialogOpen, setDialogOpen] = React.useState(false);
return (
<Wrapper>
<DialogComponent isDialogOpen={isDialogOpen} setDailogOpen={setDialogOpen}/>
</Wrapper>
);
}
interface ChildComponentProps {
isDialogOpen: boolean,
setIsDialogOpen: any,
}
function ChildComponent ({isDialogOpen, setIsDialogOpen} : ChildComponentProps) {
const count= 10;
useSomehook(isDialogOpen, count); //error here
return (
<Wrapper>
<div>somedivs</div>
{isDialogOpen && <Overlay/>}
</Wrapper>
);
}
我在其他文件中定义了 useSomehook,如下所示,
export function useSomehook(enabled: boolean, count:number) {
React.useEffect(() => {
if (enabled) {
trigger(count);
}
}, [enabled, count, trigger]);
}
我是使用打字稿的新手。我不知道如何解决这个错误。有人可以帮我解决这个问题。谢谢。
解决方案
您有一个使用布尔值的 useState。在打字稿中,您必须确保在这种情况下您作为布尔值传递的任何变量都不能是未定义的。
有多种解决方案,但快速解决方法是像这样修复您的组件。
function ChildComponent ({isDialogOpen, setIsDialogOpen} : ChildComponentProps) {
const count= 10;
useSomehook(isDialogOpen !== undefined ? isDialogOpen : false, count); //error here
return (
<Wrapper>
<div>somedivs</div>
{isDialogOpen && <Overlay/>}
</Wrapper>
);
}
这确保如果 isDialogOpen 不是未定义的,我们将使用该值,否则我们使用布尔值“false”。当然,您可以根据自己的喜好对其进行编辑。
推荐阅读
- html - 在同一页面上加载目标 iFrame
- c# - 如何在 C# 中比较两个图像并显示两个图像之间的差异?
- python - Python:如何使用 OVH 云 API 一次从服务器中删除多个文件(我正在使用 Python 请求删除方法)
- php - 在php上为不同路径制作文件夹
- templates - 如何在 vuejs 中使用 bootstrap 4 主题
- python - 如何使用 Python 作为运行环境在 AWS Lambda 中将 HTML 转换为 PDF
- apache-nifi - 如何在 Nifi 模板中进行错误处理
- android - PublishSubject blockingLast() 挂起 Android 应用程序而不调用
- javascript - 添加一个带有 a 的 Div 元素
里面和
- php - 如何拆分文本值以获取codeigniter中每个子文本的json