我的目标是在下拉列表中列出所有美国州名。如果stateName
中有一个this.props
(它将来自redux存储,以NY,KY或空字符串之类的值的形式出现),我希望下拉列表默认显示它。否则,我希望下拉列表默认显示“选择国家”,然后让用户选择它。我正在尝试在select标签上使用defaultValue
属性,如下所示:
<select defaultValue={this.props.stateName}>
{ this.renderStateOptions("someParameter") }
</select>
这就是
renderStateOptions
函数的样子:const stateNames = [{ name: 'Alabama', abbreviation: 'AL' }, { name: 'Alaska', abbreviation: 'AK' }]
renderStateOptions = () => stateNames.map(stateObj => <option key={stateObj.abbreviation} value={stateObj.name}</option>);
这里的问题是,即使我在
this.props.stateName
中有一个值(如NY,KY等),该下拉列表仍将“阿拉巴马州”显示为第一个/默认选项。现在,在renderStateOptions
功能中,如果我将selected
道具添加到正确的状态,则会收到Use the defaultValue or value props on <select> instead of setting selected on <option>.
警告,这导致我首先使用defaultValue
。我不确定设置defaultValue
道具时缺少什么。另外,当状态名称(空字符串)没有任何值时,我想显示“选择状态”作为禁用/隐藏选项。为了达到这个目的,我正在做以下事情:
<select defaultValue={this.props.stateName}>
<option hidden>Select a state</option>
{ this.renderStateOptions("someParameter") }
</select>
这导致覆盖我获得的
Alabama
值,并且仅呈现Select a state
选项,这很有意义。什么是处理这种情况的好方法? 最佳答案
好吧,defaultValue
需要匹配value
元素的option
属性。
您的代码显示defaultValue
是AL
,而option
设置为<option value="Alabama">
因此,您必须将defaultValue
设置为Alabama
或使用stateObj.abbreviation
作为值。
关于javascript - 无法使用React中的defaultValue属性在<select>上呈现默认值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54914135/