Publish
является классом, а не экземпляром, поэтому Publish.onSubmit
- onSubmit
не является полем класса , а не статическим методом .
Если бы onSubmit
был обычным методом, это было бы свойство Publish.prototype
, и вы могли бы использовать
<form onSubmit={Publish.prototype.onSubmit}>
Вы могли бы использовать только
<form onSubmit={Publish.onSubmit}>
если onSubmit
были статическими (и, следовательно, свойством самого класса), например:
static onSubmit() {
// do something
}
Чтобы сделать onSubmit
обычным методом, измените его синтаксис на
onSubmit() {
// do something
}
Если вы создаете экземпляр Publish
и вам нужно this
, чтобы сослаться на экземпляр внутри onSubmit
, то вам также потребуется .bind
функция внутри конструктора.
Живой фрагмент:
class Publish extends React.Component {
onSubmit(event) {
event.preventDefault();
console.log('submit running');
}
}
class App extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<form onSubmit={Publish.prototype.onSubmit}>
<button>button</button>
</form>
</div>
);
}
}
// Render it
ReactDOM.render(
<App />,
document.getElementById("react")
);
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>