我正在这个 React App 中实现 typescript。我正在使用 react-bootstrap(已经安装了类型)。我有一个列表组,其中包含如下操作项。要获取我拥有的每个项目的点击事件的类型:((event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void) 不确定为什么它会建议这种类型,因为当我检查 DOM 时,我看到了按钮。不管怎样,下面是列表组的代码。
<ListGroup id="riskQuestion-1" >
<ListGroup.Item action onClick={(event:((event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void) | undefined) => handleInput(setRiskAnswer1, 5, event)} >I was great!</ListGroup.Item>
<ListGroup.Item action onClick={(event:((event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void) | undefined) => handleInput(setRiskAnswer2, 3, event)}>I did good but can be better</ListGroup.Item>
</ListGroup>
那么我的 handleInput 函数是:
const [riskAnswer1, setRiskAnswer1] = useState<number | null>(null);
const [riskAnswer2, setRiskAnswer2] = useState<number | null>(null);
interface InputParams {
answerHandler:React.Dispatch<React.SetStateAction<number | null>>,
value: number,
event: ((event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void) | undefined
}
function handleInput({answerHandler, value, event}:InputParams) {
event.preventDefault();
const parentEl = event.target.parentNode;
const parentId = parentEl.getAttribute("id");
if (parentId) {
const el = document.getElementById(parentId);
if (el) {
for (let i=0; i < el.children.length; i++) {
if (el.children[i].classList.contains('selected')) {
el.children[i].classList.remove('selected');
}
}
}
}
event.target.classList.add("selected");
answerHandler(value);
}
我在这段代码中确实有一些 event.target 问题,但这可能与手头的主要问题有关,也可能无关。现在的主要问题是打字稿仍然显示错误onClick。当我将鼠标悬停在下方时,就是我所看到的。
所以两个问题:
1-我需要改变什么
2- 起初我将所有类型的参数内联在括号内,但我将它们移到interface InputParams
现在有了这个更改,我在列表组项目上调用 handleInput,我看到了这个错误:Expected 1 arguments, but got 3.ts(2554)
所以似乎 function handleInput({answerHandler, value, event}:InputParams) {
不是正确的方法在这里实现类型?不要担心上面的所有错误都是在我将所有参数类型都内联时生成的。所以这只是我想问的额外问题。
感谢任何指导。谢谢你!
蛊毒传说
相关分类