在 React 组件里使用表单元素,我们经常需要防止表单元素的默认的一些行为,因为需要把元素的控制权交给 React 去处理。
在 AppForm 这个组件里,先添加一组 form 元素,里面再用一个 text 类型的 input ,用 name 给它起个名字,叫 content。下面再添加一个 submit 类型的 input,把它的 value 设置成 提交。
在浏览器预览一下,现在界面上会显示一个表单,里面有两个表单元素,一个文本框,一个提交按钮。在文本框里输入点内容,然后按一下这个提交按钮。默认会打开新的页面,地址是 ? 后面是表单里的一个元素的名字,就是这个 content ,然后是我们在这个表单元素里输入的值。
这就是 form 元素的默认行为,也就是提交表单时,会打开新的地址。要禁用表单元素的这个行为,可以监听一下这个 form 元素的 onSubmit 事件,用 this.onSubmitForm 来处理这个事件。
然后在组件里添加一个类字段,名字是 onSubmitForm,它是一个方法,有个 event 参数,类型是 FormEvent,在方法里可以调用一下 event 参数的 preventDefault() 这个方法,禁用事件的默认行为。在文件顶部,从 react 这个包里把 FormEvent 导入进来。
回到浏览器再测试一下,在文本框里输入点内容,然后按一下提交按钮。因为我们监听了 form 元素的提交事件,并且调用了事件的 preventDefault 方法,这样就会禁用这个元素的提交事件的默认行为,所以这次页面没有刷新,地址也没有变化。