typescript 3.33的onClick问题并做出反应
Posted
技术标签:
【中文标题】typescript 3.33的onClick问题并做出反应【英文标题】:onClick problem with typescript 3.33 and react 【发布时间】:2019-08-07 22:41:30 【问题描述】:我正在尝试在带有 TypeScript 和 React 的链接上使用 onClick 属性:
import * as React from 'react';
import any from 'prop-types';
function handleClick(this:any,name:React.ReactNode)
console.log('The link was clicked.');
this.props.callbackFromParentSearch(name);
export const Suggestions = (props:any) =>
const options = props.results.map((r: id: React.Key; name: React.ReactNode; ) => (
<a href="#" onClick=handleClick(r.name)>
<li key=r.id>
r.name
</li>
</a>
))
return <ul>options</ul>
export default Suggestions
但这会报错:
类型 'void' 不能分配给类型 '(event: MouseEvent) => void'.ts(2322) index.d.ts(1315, 9):预期类型来自属性“onClick” 这是在类型上声明的 '详细的htmlProps, HTMLAnchorElement>'
那么如何在 TypeScript & React 中正确使用 onClick 事件呢?
【问题讨论】:
【参考方案1】:你需要传递一个函数:
onClick=() => handleClick(r.name)
但是,即使这样,您的代码也无法工作,因为您的 handleClick
函数需要以 this
是包含您的道具的对象的方式绑定。在您的代码中并非如此。
你的组件应该是这样工作的:
export const Suggestions = (props:any) =>
const options = props.results.map((r: id: React.Key; name: React.ReactNode; ) => (
<a href="#" onClick=() => props.callbackFromParentSearch(r.name)>
<li key=r.id>
r.name
</li>
</a>
))
return <ul>options</ul>
或者像这样:
function handleClick(props: any, name: React.ReactNode)
console.log('The link was clicked.');
props.callbackFromParentSearch(name);
export const Suggestions = (props:any) =>
const options = props.results.map((r: id: React.Key; name: React.ReactNode; ) => (
<a href="#" onClick=() => handleClick(props, r.name)>
<li key=r.id>
r.name
</li>
</a>
))
return <ul>options</ul>
【讨论】:
其实在TypeScript中,将this
的类型声明为第一个参数is allowed(编译后的JS会省略第一个参数)。所以这部分代码是有效的,即使其他部分不是。
我没说无效。但这与他的称呼不符。
说“你的handleClick函数需要两个参数”是不正确的。它只需要一个,因为this
参数isn't included in the compiled output。
我明白了,感谢您的澄清。但它仍然不起作用,对吧?我更新了我的答案以更准确。你同意吗?
现在看来,我只会说“以某种方式调用”而不一定“以某种方式绑定”以上是关于typescript 3.33的onClick问题并做出反应的主要内容,如果未能解决你的问题,请参考以下文章
使用 Typescript 和 React.Konva 指定 onClick 事件类型
如何在 ReactJS Typescript 中 2 分钟后自动发生 onclick
chrome 未定义 - Mocha 和 Typescript