Javascript 在另一个类(REACT.js)中使用函数onSubmit
我在app.js中有一个按钮,我想从另一个函数中使用event-onSubmit。但是,当我尝试的时候,什么都没有发生 附录jsJavascript 在另一个类(REACT.js)中使用函数onSubmit,javascript,reactjs,jsx,Javascript,Reactjs,Jsx,我在app.js中有一个按钮,我想从另一个函数中使用event-onSubmit。但是,当我尝试的时候,什么都没有发生 附录js import React, { Component } from 'react'; import Publish from './Publish'; class App extends Component { constructor(props) { super(props); } render() { return (
import React, { Component } from 'react';
import Publish from './Publish';
class App extends Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<form onSubmit={Publish.onSubmit}>
<button></button>
</form>
</div>
);
}
}
export default App;
当submit上的Publish函数在应用程序中运行时,它起作用了。但是现在,当我按下按钮时,什么也没发生。
如何修复它?Publish
是一个类,不是一个实例,因此没有Publish。onSubmit
-onSubmit
是一个类字段,不是静态方法
如果onSubmit
是一个普通方法,那么它将是Publish.prototype
的一个属性,您可以使用
<form onSubmit={Publish.prototype.onSubmit}>
要使onSubmit
成为普通方法,请将其语法更改为
onSubmit() {
// do something
}
如果实例化Publish
,并且需要this
引用submit
中的实例,那么还需要绑定构造函数中的函数
实时片段:
类发布扩展了React.Component{
提交(事件){
event.preventDefault();
console.log('submitrunning');
}
}
类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
}
render(){
返回(
按钮
);
}
}
//渲染它
ReactDOM.render(
,
document.getElementById(“react”)
);代码>
这不是您在react中应该做的事情。显然,如中所述,您可以使用:
<form onSubmit={Publish.prototype.onSubmit}>
或者,只需导出函数并使用它
但是,像这样实施会给您带来巨大的成本。例如,很难维持这些状态。因此,我建议您提供一个父包装器,并为事件处理程序提供道具,如:
<ParentComponent onSubmit={this.onSubmit}>
在子组件中,钩住该事件。例如:
static onSubmit() {
// do something
}
<ChildComponent onSubmit={this.props.onSubmit}>
如需进一步帮助,您可以查看其他帖子:
希望,这是有道理的 onSubmit
是否需要是组件方法?它可能是由Publish
和App
导入的模块中的一个函数吗?@stealthInja是的,在模块中,我需要在提交后获取和使用(例如:3个按钮,包含3个不同的事件)。很遗憾,但不起作用:(@Hiroyasu It should.BTW,你在那里尝试做什么也很重要。只需记录一些东西就可以了。@bhojendraurauniyar我正在尝试连接MetaMask。在一个文件(app.js)中,所有这些代码都可以工作,但我甚至尝试添加console.log(“错误”)在Publish中,这对我没什么帮助。我想button只是看不到事件,但不知道why@Hiroyasu不太确定,但您可以尽可能尝试我在帖子中提到的另一个选项。@Hiroyasu我的错误是,onSubmit
是一个类字段,不是一个普通的方法,因此它不在原型上-请参阅使用live snippet编辑
<ParentComponent onSubmit={this.onSubmit}>
<ChildComponent onSubmit={this.props.onSubmit}>