React-Mobx 警告:组件正在更改不受控制的输入
React-Mobx Warning: A component is changing an uncontrolled input
我使用 React + TypeScript + Mobx。我用输入制作了表格,一切正常,但浏览器给出了错误。我做错了什么?
Warning: A component is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
表格:
@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>
);
}
}
React 的输入 controlled/uncontrolled 基于输入中存在的 value prop。您正在传递 value 属性,但 _inputText
以 undefined
开头。当输入的值开始未定义时,React 将始终以不受控模式启动输入。
输入后,_inputText
不再是未定义的,输入会切换到受控模式,您会收到警告。
对于您的情况,修复很简单;只需将 _inputText
初始化为空字符串:
@observable
private _inputText: string = '';
您还可以调整 <InputField />
以强制将未定义的值属性设为空字符串:
render() {
return (
<div>
<input
type="text"
value={this.props.value == null ? '' : this.props.value}
onChange={this.onChange}
/>
</div>
);
}
我使用 React + TypeScript + Mobx。我用输入制作了表格,一切正常,但浏览器给出了错误。我做错了什么?
Warning: A component is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
表格:
@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>
);
}
}
React 的输入 controlled/uncontrolled 基于输入中存在的 value prop。您正在传递 value 属性,但 _inputText
以 undefined
开头。当输入的值开始未定义时,React 将始终以不受控模式启动输入。
输入后,_inputText
不再是未定义的,输入会切换到受控模式,您会收到警告。
对于您的情况,修复很简单;只需将 _inputText
初始化为空字符串:
@observable
private _inputText: string = '';
您还可以调整 <InputField />
以强制将未定义的值属性设为空字符串:
render() {
return (
<div>
<input
type="text"
value={this.props.value == null ? '' : this.props.value}
onChange={this.onChange}
/>
</div>
);
}