reactjs - 如何使用反应和打字稿修复错误“false类型的参数不可分配给(currentValue:boolean)=> boolean”?
问题描述
我想使用 react 和 typescript 修复错误“false 类型的参数不可分配给 (currentValue: boolean) => boolean。
我有一个方法 toggleDialogVisibility 定义如下
export const useDialog() {
const {setDialogVisibility} = React.useContext(DialogContext);
return ({
const toggleDialogVisibility = (toggleValue: (currentValue: boolean) => boolean) => { //this is causing the error
setDialogVisible(toggleValue);
};
} );
};
我在下面的两个组件中调用它,
function Parent() {
const {toggleDialogVisibility} = useDialog();
return (
<div onClick={() => toggleDialogVisibility(open => !open)} />
);
}
function AnotherComponent() {
const {toggleDialogVisibility} = useDialog();
const handle = () => {
toggleDialogVisibility(false); //error here
}
}
我不知道如何解决这个问题。有人可以帮我解决这个问题。谢谢。
解决方案
我认为你不需要 useDialog
function Parent() {
const {setDialogVisibility} = React.useContext(DialogContext);
return (
<div onClick={() => setDialogVisibility(open => !open)} /> //getting error here
);
}
function AnotherComponent() {
const {setDialogVisibility} = React.useContext(DialogContext);
const handle = () => {
setDialogVisibility(false); //error here
}
}
如果真的想要,我更喜欢
export const useDialog() {
const {setDialogVisibility} = React.useContext(DialogContext);
return React.useCallback(()=> {
setDialogVisibility(x=> !x)
}, [setDialogVisibility])
};
function Parent() {
const toggle = useDialog();
return (
<div onClick={toggle} /> //getting error here
);
}
function AnotherComponent() {
const toggle = useDialog();
return <div onClick={toggle}>Close</div>
}
推荐阅读
- spring-integration - 如何将 ID 设置为 http 入站网关(DSL 样式)?
- httprequest - 使用 LoadBodyFromString 时 ChilkatHttpRequest 将 CR 转换为 CRLF
- dns - 设置 DKIM 私钥?我把它放在哪里?里面的细节
- python - "sock.sendto(bytes, (ip, port))""AttributeError: 'str' object has no attribute 'sendto'"
- reactjs - 将 baseURL 设置为 window.location.origin 以进行生产/heroku 部署是一种好习惯吗?
- c# - 保存用户名,并显示在其他页面上
- angularjs - 如何访问 angularjs 控制器中的 DOM 元素?
- c++ - QString split 也在 '.' 处分裂。
- python - 使用 Python、Pandas、Matplotlib 引擎显示报告的应用程序
- sql-server - 无法为 Integration Services 项目将目标服务器版本设置为 SQL Server 2012