如何在 React 中获取提交的表单值?

IT技术 forms reactjs
2021-05-27 09:27:21

这是我的 React 组件

import React, { Component } from 'react';
import categories from './categories.json'
import './content.css'

export default class Content extends Component {
    constructor(props) {
        super(props)
        this.state = {
            searchText: '',
            categories
        }
    }

    render() {
        return(
            <div className="content">
            <form className="searchform" onSubmit={this.search}>
                <input type="text" name="keyword" id="searchbox" placeholder="Search String"></input>
                <select name="categories" id="searchcategories">
                <option defaultValue="" defaultChecked>Select a category</option>
                {this.state.categories.map(x => 
                    <option key={x.value} value={x.value}>{x.name}</option>
                )}</select>
                <input type="submit" value ="Search" id="searchsubmit" />
            </form>
            </div>
        )
    }

    search(e) {
        console.log(e.target)
        e.preventDefault();
    }
}

单击提交按钮时,我的函数search会被调用。但是,如何获取提交的值?

e.target给我整个表单 DOM HTML e.target.valueundefined

2个回答

在 React 中,表单组件有两种选择:

受控组件( https://reactjs.org/docs/forms.html#controlled-components ) 通过将它们的 value 属性设置为状态变量来将它们的值链接到组件状态。在这种情况下,您可以使用组件的 this.state 来检查它们的值。

不受控制的组件( https://reactjs.org/docs/uncontrolled-components.html ) 可以在实例化时将引用附加到其父组件......通常像这样ref={(input) => this.input = input}当您的函数search被调用时,您可以检查该值的引用,即this.input.value.

您需要为此使用状态变量。例如,每当文本更改时,将 this.state.searchText 与元素同步。然后定义一个回调机制,如 -

onSubmit={()=>{
console.log('My searchBox's latest value is : ',this.state.searchText);
}}

请记住,在 React 中,我们遵循单向流程。所以,我们总是从 props 或 state 中获取数据,不需要处理 DOM 遍历。