【发布时间】:2017-07-22 22:19:34
【问题描述】:
我正在尝试在<select> 元素中处理动态生成的<option> 的选择。我知道onChange 触发器是我需要设置状态的,但我似乎无法让她工作。
这就是我正在做的事情:
请参阅 Archibald Hammer (@archaeopteryx) 在CodePen 上的钢笔dynamic select。import React from 'react'
import ReactDOM from 'react-dom'
import _ from 'lodash'
const ITEMS = [
{ name: 'centos', text: 'centos', value: 'centosValue' },
{ name: 'ubuntu', text: 'ubuntu', value: 'ubuntuValue' },
]
const SelectComponent = (props) => (
<select name={props.name}>
{_.map(props.items, (item, i) => <Option
key={i}
name={item.name}
value={item.value}
text={item.text}
handleSelect={props.handleSelect}
/>
)}
</select>
)
const Option = (props) => (
<option
value={props.value}
onChange={props.handleSelect}>{props.text}</option>
)
class App extends React.Component {
constructor() {
super()
this.state = {
selected: ''
}
this.handleSelect = this.handleSelect.bind(this)
}
handleSelect(e) {
this.setState({selected: e.target.value})
}
render() {
return (
<div>
<SelectComponent
name="testSelect"
items={ITEMS}
handleSelect={this.handleSelect}
/>
<div>
<p>Selected: {this.state.selected}</p>
</div>
</div>
)
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
此代码会按预期呈现下拉选择器,但不会触发所选项目的 setState。有什么想法吗?
另外,有没有人有任何解决此类问题的专业提示?您知道任何超级流畅的开发工具或找出正在传递哪些道具的方法等?
【问题讨论】:
标签: forms reactjs lodash setstate