我刚刚开始尝试在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><{'Col xs={12} md={8}'} /></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 回答
react(无状态)中的功能组件没有 refs .
来自官方docs
如果您需要引用,请使用ES6类,如果不使用带有类语法的Parent
Login
组件中的this.state
,并在FieldGroup
上输入值更改时使用this.setState(yourState)
然后在你的你会做
来自docs: