【问题标题】:react-select not resetting value on change of statereact-select 在状态变化时不重置值
【发布时间】:2020-02-08 09:12:36
【问题描述】:

在重置表单中的所有状态时,我有 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
    });
  };

【问题讨论】:

    标签: javascript reactjs react-select


    【解决方案1】:

    有几件事引起了我的注意:

      1234563复制它:this.baseState = Object.assign({}, this.state)
    1. 您的 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();
      };
    
    1. 试试这个,看看它是否有助于调试正在发生的事情。
           <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}
            />
        ```
    

    【讨论】:

    • 非常感谢您的帮助,我根据您的提示更新了我的代码。我用你的第三个代码更新了选择组件。我在尝试选择任何国家时收到此消息 TypeError: Cannot read property 'value' of undefined
    • 280 | onChange={e => this.setState({ pais1: e.target.value })}
    • 我在第三个示例中更新了onChange。检查控制台并查看返回的内容。显然响应是e.value,而不是在这种情况下e.target.value 会起作用的事件。
    • 很好,它返回并使用我的数据作为对象 e: label: {$$typeof: Symbol(react.element), type: "div", key: null, ref: null, props: { …}, …} 值:“哥伦比亚”proto:对象 proto:对象
    • 但 id 没有选择哥伦比亚选项,它保留在默认占位符上
    【解决方案2】:

    尝试将 value prop 传递给 Select 组件,例如 value={this.state.pais1}

    【讨论】:

    • 已经做了,但它崩溃了。它没有选择任何值并使用占位符保持初始空状态。
    【解决方案3】:

    如果您尝试在构造函数中绑定 pais1Cambio 和 pais2Cambio 是否有效?

    【讨论】:

    • 不,我试过了。我不知道为什么,如果我在选择组件上使用 value={this.state.pais1}。它崩溃并且不选择任何项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2019-12-19
    • 2018-11-11
    • 2021-05-21
    • 2019-02-01
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多