coo*_*JCW 5 typescript reactjs mobx
我使用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>
);}}
Run Code Online (Sandbox Code Playgroud)
输入:
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>
);
}
}
Run Code Online (Sandbox Code Playgroud)
React 的输入是根据输入上是否存在 value 属性来控制/不受控制的。您正在传递 value 属性,但_inputText以undefined. 当输入的值开始未定义时,React 将始终以不受控制的模式启动输入。
一旦您输入输入,_inputText就不再是未定义的,并且输入将切换到受控模式,并且您会收到警告。
对于您的情况,修复很简单;只需初始化_inputText为空字符串:
@observable
private _inputText: string = '';
Run Code Online (Sandbox Code Playgroud)
您还可以调整您<InputField />以强制未定义的值道具为空字符串:
render() {
return (
<div>
<input
type="text"
value={this.props.value == null ? '' : this.props.value}
onChange={this.onChange}
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |