首页 文章

React Redux Noob - 提交表单数据

提问于
浏览
1

我刚刚开始尝试在Redux和React的一些教程后做出反应,我在控制台中收到错误:

警告:无法为无状态函数组件提供refs(请参阅Login创建的FieldGroup中的ref“username”) . 尝试访问此参考将失败 .

将表单字段输入值传递给提交按钮的正确方法是什么?这些值是否应该进入redux商店?阅读文档之后:https://reactjs.org/docs/refs-and-the-dom.html#a-complete-example在这种情况下我似乎应该避免引用 . 那么,如果没有参考,我如何获得提交按钮的输入值?谢谢你的帮助 .

Login.jsx

import React, {Component, PropTypes} from 'react';
import {Row, Col, FormControl, FormGroup, ControlLabel, HelpBlock, Checkbox, Button} from 'react-bootstrap';

export default class Login extends Component {

  render() {
    const { errorMessage } = this.props;
    function FieldGroup({ id, label, help, ...props }) {
      return (
        <FormGroup controlId={id}>
          <ControlLabel>{label}</ControlLabel>
          <FormControl {...props} />
          {help && <HelpBlock>{help}</HelpBlock>}
        </FormGroup>
      );
    }

    const formInstance = (


          <Col xs={12} md={8} mdOffset={2}>
            <code>&lt;{'Col xs={12} md={8}'} /&gt;</code>
            <form>
              <FieldGroup
                id="formControlsEmail"
                type="email"
                label="Email address"
                placeholder="Enter email"
                ref="username"
              />
              <FieldGroup
                id="formControlsPassword"
                label="Password"
                type="password"
                ref="password"
              />
              <Checkbox checked readOnly>
                Checkbox
              </Checkbox>

              <Button type="submit" onClick={(event) => this.handleClick(event)}>
                Submit
              </Button>
              {errorMessage &&
                <p>{errorMessage}</p>
              }
            </form>
          </Col>

    );
    return formInstance;
  }

  handleClick(event) {
    const username = this.refs.username
    const password = this.refs.password
    const creds = { username: username.value.trim(), password: password.value.trim() }
    this.props.onLoginClick(creds)
  }
}

Login.propTypes = {
  onLoginClick: PropTypes.func.isRequired,
  errorMessage: PropTypes.string
}

1 回答

  • 1

    react(无状态)中的功能组件没有 refs .

    来自官方docs

    参考和功能组件您可能不会在功能组件上使用ref属性,因为它们没有实例:

    如果您需要引用,请使用ES6类,如果不使用带有类语法的Parent Login 组件中的 this.state ,并在 FieldGroup 上输入值更改时使用 this.setState(yourState)

    然后在你的你会做

    handleClick(event) {
        const username = this.state.username
        const password = this.state.password
        const creds = { username: username.value.trim(), password: password.value.trim() }
        this.props.onLoginClick(creds)
      }
    

    来自docs

    但是,只要引用DOM元素或类组件,就可以在函数组件中使用ref属性:

相关问题