【发布时间】:2018-11-15 20:46:24
【问题描述】:
我使用 React + TypeScript + Mobx。我用输入制作了表单,一切正常,但浏览器出错。我做错了什么?
警告:组件正在更改要控制的文本类型的不受控制的输入。输入元素不应从不受控切换到受控(反之亦然)。决定在组件的生命周期内使用受控输入元素还是不受控输入元素。
表格:
@observer
export class SearchForm extends React.Component {
@observable
private _inputText: string;
submitForm = (event: SyntheticEvent<HTMLFormElement>) => {
event.preventDefault();
}
render() {
return (
<form onSubmit={this.submitForm}>
<InputField
value={this._inputText}
onChange={action((value: string) => this._inputText = value)}
/>
</form>
);}}
输入:
interface Props {
value: string;
onChange: (inputText: string) => void;
}
@observer
export class InputField extends React.Component<Props> {
onChange = (event: SyntheticEvent<HTMLInputElement>) => {
this.props.onChange(event.currentTarget.value);
}
render() {
return (
<div>
<input
type="text"
value={this.props.value}
onChange={this.onChange}
/>
</div>
);
}
}
【问题讨论】:
-
你的
input实际上是被控制的,所以我看不出问题。也许您的代码中某处还有另一个不受控制的输入元素? -
不,我在项目中只有一个输入
-
你能设置一个 plunkr、codepen 或类似的工具来重现这个问题吗?
标签: reactjs typescript mobx