为什么React说没有选择&#39;选择&#39; <option>元素的属性?

时间:2016-04-18 20:57:24

标签: javascript html reactjs jsx

[编辑]这是由于我自己的困惑,道歉。

在JSX中设置selected元素上的<option>属性非常有效,但它会导致React抛出警告:

Warning: Use the 'defaultValue' or 'value' props on <select> instead of setting 'selected' on <option>.

在父defaultValue元素上设置<select>会导致value的{​​{1}}默认为该设置,但不会设置默认选择<select> }。因此,这会抛出用户看到的内容以及实际选择的不同步内容。

在父<option>元素上设置value属性会强制我添加一个onChange处理程序,在组件状态中设置值,并编写一堆额外的代码来完成简单设置{ <select>元素上的{1}}只有一个单词。

有人知道为什么React会抛出这个警告吗?我不想写一堆额外的代码来删除一个似乎没有映射到现实的警告。据我所知,它的工作正常,为什么不能使用它?

1 个答案:

答案 0 :(得分:4)

Here's the React documentation to go along with that warning: https://facebook.github.io/react/docs/forms.html

如果按照他们建议的方式进行操作,则可以使用“值”属性呈现<SELECT>组件。然后,您需要为onChange事件编写处理函数,以确保该组件重新呈现以反映用户更改的选择。

如果您尝试在单个<OPTION>元素级别管理此信息流,我认为您将遇到相同的挑战,然后是一些挑战。例如,假设在页面加载时选择了选项A.然后用户选择选项B.选项B需要重新渲染才能显示为选中,选项A需要重新渲染才能显示为未选中。对于选项B上的onClick事件触发选项A的更改,必须将信息从选项B传递到父选择元素,然后传递到选项A元素。

React文档还讨论了一个“不受控制的”<SELECT>元素,我认为这意味着它最初会渲染一次(你可以为它指定一个defaultValue,但React不会继续重新渲染它)实时。