【发布时间】:2022-01-09 13:34:09
【问题描述】:
这有一个简单的解决方法,但我是一名学生,正在尝试学习打字稿。谢谢你的帮助。
我正在尝试将一些自定义挂钩转换为打字稿
import { useState } from 'react';
export default function useToggle(defaultValue: Boolean = false) {
const [value, setValue] = useState(defaultValue);
const toggleValue = (value?: boolean) => {
setValue((currentValue) =>
typeof value === 'boolean' ? value : !currentValue
);
};
return [value, toggleValue] as const;
}
ToggleValue 的类型是 Boolean |不明确的。我想将它用作 onClick 并仅发送默认切换的功能。这在不使用打字稿时有效。我认为是因为 onClick 可以接受 undefined 但不能接受可选的布尔值。
<button onClick={toggleValue}>toggle</button> {/* MAKE ThIS WORK? */}
<button onClick={() => toggleValue(true)}>set True</button>
<button onClick={() => toggleValue(false)}>set False</button>
使用 Typescript,即使不提供参数,我也需要将其编写为回调
<button onClick={()=>toggleValue()}>toggle</button>
【问题讨论】:
-
onClick会将事件作为回调的第一个参数传递,并且 TS 会(正确地)警告您这不是您的函数所期望的值 -
谢谢。如果 ToggleValue() 不接受任何参数,它就可以工作。 (没有设置值功能)为什么不期望任何内容的函数会接受事件?将可选事件添加到 ToggleValue 是否有意义,或者尝试使此实现工作是一种不好的做法。
-
按照你说的把它包起来:
() => toggleValue()
标签: reactjs typescript react-hooks callback onclick