【发布时间】:2019-04-03 22:24:57
【问题描述】:
react 给了我一个警告:“一个组件正在更改复选框类型的不受控输入以进行控制。输入元素不应从不受控切换到受控(反之亦然)。”
但是,我的复选框是通过 state 属性更改的。我错过了什么明显的东西吗?
import React from 'react';
// Components
import Checkbox from './checkbox';
import HelpBubble from './helpBubble';
export default class CheckboxField extends React.Component {
constructor(props) {
super(props);
this.state = {value: props.value};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
componentWillReceiveProps(nextProps) {
if (nextProps.value !== this.props.value) {
this.setState({value: nextProps.value});
}
}
render() {
const {label, meta = {}, help, disabled, required, onChange} = this.props;
return (
<label className="checkbox-wrap form-field">
<Checkbox
disabled={disabled}
type="checkbox"
onChange={(event) => {
onChange(event, !this.state.value);
}}
checked={this.state.value}/>
{label && (
<div className="checkbox-label">
{label}
{required && <div className="form-field__required"/>}
</div>
)}
{help && <HelpBubble help={help}/>}
{meta.error && meta.touched && (
<div className="input-error">{meta.error}</div>
)}
</label>
);
}}
父组件: handleChangeParams(键,值) } /> 处理更改参数更改模型中的值并调用服务器。根据服务器结果,该值可能会发生变化。
提前致谢。
【问题讨论】:
-
如果没有您也发布
Checkbox组件和CheckboxField的父组件,我们无法确定 -
onChange={(event) => { onChange(event, !this.state.value); }}不确定,为什么? -
就像@Ved 暗示的那样,处理程序是错误的。但这看起来有更多的问题。我建议您检查reactjs.org/docs/forms.html 使用他们的示例并从那里获取。
-
@PeterVanDrunen 我添加了一些关于父组件的信息。下面的答案似乎有效,但如果我做错了什么,我仍然很高兴:)
-
@Ved 调用“onChange”时,状态值仍然是“先前”值。实际上它根本没有改变,除非由父元素设置。
标签: javascript reactjs