【问题标题】:Selector tag with defaultvalue problem (JSX)具有默认值问题的选择器标记 (JSX)
【发布时间】:2019-07-11 13:27:23
【问题描述】:

选择器标记中的 defaultValue 属性无法按预期工作。我有一个包含一些字段和一些选择器字段的表单组件。现在,当从另一个组件按下编辑按钮时,我需要预先填充表单。我用this.props.history.push({ pathname: "/Register", prePopulate: res.data.data });传递数据

我使用 this.props.location.prePopulate 访问数据。

我将新值设置为状态,表单字段会加载以前的数据。问题在于不显示先前选择的选项的选择器。我尝试使用 defaultvalue 属性并传递 this.state.value 值,但它不起作用。如果我对一个选项进行硬编码,它可以工作,但当它试图从状态中拉出时却不行。

<select
                        className={classnames("form-control form-control-sm", {
                          "is-invalid": this.state.valEmergency
                        })}
                        name="emergency"
                        onChange={this.onChange}
                        defaultValue={this.state.emergency}
                      >
                        <option value="">Choose your level</option>
                        <option value="PRIMARY">Primary</option>
                        <option value="SECONDARY">Secondary</option>
                        <option value="TERTIARY">Tertiary</option>
                      </select>

【问题讨论】:

  • 尝试使用 forceUpdate() 或 key 属性来选择将重新渲染的标签
  • 我在渲染函数中添加了一个 console.log(this.state) 命令,状态打印了 2 次。第一次是空的,然后组件将挂载更新状态,以便第二次用正确的值填充状态。所以我重新渲染了 2 次。

标签: javascript reactjs jsx


【解决方案1】:

您可以使用 value 属性并使用 onChange={this.onChange} 处理更改。所以不要使用defaultValue={this.state.emergecy},而是使用value={this.state.emergency}

【讨论】:

  • 如果我添加value={this.state.emergecy},那么我无法从下拉列表中选择其他选项。它会显示预填充选项,但我无法选择其他选项。
  • 我的名字与状态值不同...现在它与 value 属性一起使用!!!非常感谢大家!
猜你喜欢
  • 2019-04-27
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多