javascript - 当我尝试使用 props 传递的函数时,为什么 preventDefault 停止工作?
问题描述
我有一个带有表单的组件,当我使用这行代码时,props 传递的函数起作用。
<form onSubmit={this.props.onCreateNewItem.bind(this)}>
如果我尝试在将运行 onCreateNewItem 的渲染之前创建另一个函数,它将停止工作。
<form action="" onSubmit={this.onChangeTest}>
onChangeTest(event){
event.preventDefault();
this.props.onCreateNewItem();
}
如果我在不尝试调用函数的情况下运行代码,则 preventDefault 有效。如果我尝试运行该函数,我会收到此错误:“TypeError:无法读取未定义的属性‘preventDefault’。” 我试图绑定它,然后 preventDefault 工作,但它不运行该功能。
this.props.onCreateNewItem.bind(this);
我很困惑,因为我可以在不调用函数的情况下让 preventDefault 工作,如果我直接在表单中调用它,我可以让函数工作,但我不能让它们一起工作。
解决方案
您必须使用bind
“onChangeTest”方法。目前this
里面onChangeTest
指的是form
对象而不是 React 组件。
class App extends React.Component {
constructor(props) {
super(props);
this.onChangeTest = this.onChangeTest.bind(this);
}
onChangeTest(event){
event.preventDefault();
this.props.onCreateNewItem();
}
render() {
return (
<form action="" onSubmit={this.onChangeTest}>
<button type="submit">Submit</button>
</form>
);
}
}
///
function onCreateNewItem() {
console.log("onCreateNewItem called")
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App onCreateNewItem={onCreateNewItem} />, rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- unity3d - Webgl unity build 不会播放视频
- node.js - How to return a response and then redirect in nedb?
- javascript - The result is not a number
- visual-studio-code - 无法在只读编辑器 VS Code 中编辑
- javascript - 在 for 循环中打破 Promise 链
- mysql - MySQL没有结果,因为外键是NULL
- javascript - flickr api - 使用 JSONP 获取照片
- c# - c#登录表单(从注册表单获取信息)
- javascript - 使用流结束 NodeJS 程序
- vba - MSHTML.HTMLDocument 中的“getElementsByClassName”问题