javascript - react-select 在状态变化时不重置值
问题描述
在重置表单内的所有状态时,我有 2 个选择国家/地区输入,我想将其重置为默认占位符。我正在使用 2 个状态变量来存储国家/地区,我有一个功能可以重置我的状态,但选择输入不会重置为默认值。它在最后选择的国家/地区保持选中状态。我将状态重置为空,但我无法让它工作。你能帮帮我吗?
class FormularioCalcular extends React.Component {
constructor(props) {
super(props);
this.state = {
moneda1: '',
monto1: '',
moneda1placeholder: 'Cantidad a enviar',
moneda1disable: false,
moneda2: '',
monto2: '',
moneda2placeholder: 'Cantidad a recibir',
moneda2disable: false,
pais1: null,
pais2: null,
disable: false
};
this.timeout = 0;
this.moneda1Cambio = this.moneda1Cambio.bind(this);
this.moneda2Cambio = this.moneda2Cambio.bind(this);
this.baseState = this.state;
}
pais1Cambio = select => {
let value = select.value;
let value2 = prefijoMoneda(value);
this.setState({
pais1: value,
moneda1: value2
});
};
pais2Cambio = select => {
let value = select.value;
let value2 = prefijoMoneda(value);
this.setState({
pais2: value,
moneda2: value2
});
};
resetState = () => {
this.setState(this.baseState);
this.setState({
pais1: null,
pais2: null
});
ReactTooltip.hide();
};
这是我选择的组件,如果我在上面使用 value 选项,它会崩溃,我无法更改它保留在占位符默认消息上的国家/地区。
<Select
name="paisorigen"
onChange={this.pais1Cambio}
options={paises}
className="paisSelectContainer"
classNamePrefix="paisSelect"
placeholder="Pais de origen"
isDisabled={this.state.disable}
/>
<Select
name="paisdestino"
onChange={this.pais2Cambio}
options={paises}
className="paisSelectContainer"
classNamePrefix="paisSelect"
placeholder="Pais destino"
isDisabled={this.state.disable}
/>
更新
值选项崩溃,因为它需要像这样接收和对象的值和标签。
<Select
name="paisorigen"
onChange={this.pais1Cambio}
options={paises}
className="paisSelectContainer"
classNamePrefix="paisSelect"
placeholder="Pais de origen"
isDisabled={this.state.disable}
value={{ value: this.pais1, label: labelPais(this.pais1) }}
/>
但是现在我遇到了一个问题,因为当我单击某个选项时。它保持默认值。这是我正在使用 onChange 的功能
pais1Cambio = select => {
let value = select.value;
let value2 = prefijoMoneda(value);
this.setState({
pais1: value,
moneda1: value2
});
};
解决方案
有几件事引起了我的注意:
当您
this.baseState = this.state;
在构造函数中执行此操作时,您不会复制状态,只是对其进行引用,因此稍后当您更新时,this.state
您也会更新this.baseState
. 要复制它:this.baseState = Object.assign({}, this.state)
.您的
resetState
函数有 2 次调用setState
. 尝试组合它们:
resetState = () => {
this.setState({
...this.baseState,
// There's no need to set pais1 and pais2 to null here since baseState already have them as null
// pais1: null,
// pais2: null
});
// or simply...
// this.setState(this.baseState)
ReactTooltip.hide();
};
- 试试这个,看看它是否有助于调试正在发生的事情。
<Select
name="paisorigen"
onChange={(e) => {
console.log({e}) // and check your console to see what's coming back here
this.setState({pais1: e.value})
}}
options={paises}
className="paisSelectContainer"
classNamePrefix="paisSelect"
placeholder="Pais de origen"
isDisabled={this.state.disable}
value={this.state.pais1}
/>
```
推荐阅读
- javascript - 在 Cypress 中重试命令失败后的选项
- c++ - 在 C++ 中删除字符串中非字母的所有字符
- stanford-nlp - 斯坦福 CoreNLP 能否在给定自定义 POS 的情况下对单词进行词形还原?
- angular - 模板更新不会在测试中发生
- java - 如何使用 java 从 gcp 存储桶下载文件夹?
- php - 如何在主目录而不是ubuntu的子目录中安装wordpress?
- angular - Auth0 与 NGRX 的集成
- django - 从 Django 中的其他 save() 方法继承时表单 save() 方法中的冲突
- reactjs - 在 reactjs 应用程序中使用 youtube 数据 api 时出现 Gapi 错误
- scala - Kafka 消费者不会间歇性地轮询记录