Javascript 类型';无效';不可分配给类型';((事件:MouseEvent<;HTMLInputElement>;)=>;void)|未定义'; import*as React from“React”; 导入“/App.css”; 从“/components/PageTwo”导入第二页; 导出接口IPropsk{ 数据?:数组; fetchData?(值:字符串):空; } 导出接口IState{ isLoaded:布尔值; 点击:数组; 值:字符串; } 类应用程序扩展了React.Component{ 构造器(道具:IPropsk){ 超级(道具); 此.state={ isLoaded:false, 点击次数:[], 值:“” this.handleChange=this.handleChange.bind(this); } fetchData=val=>{ 警报(val); }; 手变(活动){ this.setState({value:event.target.value}); } render(){ 返回(
在您的代码Javascript 类型';无效';不可分配给类型';((事件:MouseEvent<;HTMLInputElement>;)=>;void)|未定义'; import*as React from“React”; 导入“/App.css”; 从“/components/PageTwo”导入第二页; 导出接口IPropsk{ 数据?:数组; fetchData?(值:字符串):空; } 导出接口IState{ isLoaded:布尔值; 点击:数组; 值:字符串; } 类应用程序扩展了React.Component{ 构造器(道具:IPropsk){ 超级(道具); 此.state={ isLoaded:false, 点击次数:[], 值:“” this.handleChange=this.handleChange.bind(this); } fetchData=val=>{ 警报(val); }; 手变(活动){ this.setState({value:event.target.value}); } render(){ 返回(,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,在您的代码this.fetchData(“dfd”)中,您正在调用该函数。该函数返回的voidvoid不可分配给需要函数的onClick 修理 创建一个调用fetchData的新函数,例如onClick={()=>this.fetchData(“dfd”)} 更多 这是TypeScript防止的一个非常常见的错误您还可以执行以下操作 <input type="button" onClick={this.fetchData("dfd")} value="Search" /> 或者,
this.fetchData(“dfd”)
中,您正在调用该函数。该函数返回的void
void
不可分配给需要函数的onClick
修理
创建一个调用fetchData的新函数,例如onClick={()=>this.fetchData(“dfd”)}
更多
这是TypeScript防止的一个非常常见的错误您还可以执行以下操作
<input type="button" onClick={this.fetchData("dfd")} value="Search" />
或者,您可以为
事件设置类型,例如React.MouseEvent
。您可以阅读更多有关它的信息。您可以这样设置类型,不会出现错误
fetchData = (val: string) => (event: any) => {
alert(val);
};
导出接口IPropsk{
数据?:数组;
fetchData?():(值:字符串)=>void;
}
对于功能组件,我们使用React.MouseEvent
并将其清除
export interface IPropsk {
data?: Array<Items>;
fetchData?(): (value: string) => void;
}
正如@basarat所说,当您有类似于button.onclick=thisFunction();
的东西时,您已经在调用该函数了。您可能只想分配该函数,而不想调用它
因此,您可以这样编写button.onclick=thisFunction;
我想使用这种类型
const clickHandler = () => {
return (event: React.MouseEvent) => {
...do stuff...
event.preventDefault();
}
}
this.fetchData(“dfd”)}value=“Search”/>我在上面一行添加了这一点,但得到了以下错误lambda在JSX属性中被禁止,因为它们的渲染性能受到影响。您得到该错误不是因为TypeScript,而是因为TsLint。您可以调整Linter或更改方法。在渲染中使用=>不是很糟糕吗?@ClaudiuCreanga它可以强制不必要的重新渲染,这就是为什么它经常被避免。请看这里的解释:只是一个提示,链接不再有效(被重定向)。Saved my day兄弟,ThanksHow这个答案与@basarat接受的答案不同还是贡献更多?
const clickHandler = () => {
return (event: React.MouseEvent) => {
...do stuff...
event.preventDefault();
}
}
onClick={()=>this.fetchData("dfd")}