【发布时间】:2018-01-08 22:51:36
【问题描述】:
我目前正在开发一个带有简单表单的 react 组件(没有 redux,只使用 react-bootstrap 进行样式设置)
我正在以下列形式从数据库中提取数据:
[
{
"id":"123",
"name":"Amy Pond",
"age":"22",
"reputation":22000
},
{
"id":"124",
"name":"Clara Oswald",
"age":"24",
"reputation":35000
}
...
]
并将其放入对象中:
let userlist = [];
userlist = addUsers(this.state.users);
我使用map根据这个数据填充了一个下拉列表,并且可以正确地将用户的状态设置为从下拉列表中选择的:
<FormControl
id = "user"
componentClass="select"
onChange={this.handleChange}
>
{userlist.map((r , i) =>
<option
key={i}
value={r.name}>
{r.name}
</option>
)}
</FormControl>
使用handleChange()
handleChange(event) {
this.setState({
value: event.target.value,
// reputation: ???? // here's where I'm running into issues
// age: ??????? // and here
});
我的问题是,我需要用户在 handleChange 函数中的年龄和声誉来相应地设置他们的状态。我试过只传递r 而不是r.name,但我得到了[object Object]。
console.log ("Handle Change Value: " + event.target.value);
如果我尝试event.target.value.name,我会返回undefined。
到目前为止,唯一有效的方法是使用 JSON.stringify,但我觉得这不是正确的方法。我还考虑过在获得名称后就搜索对象,但是如果有很多对象,我认为效率会非常低吗?我也不知道该怎么做。
谁能帮我找到一种方法来传递这两个额外的值,以便我可以设置状态?地图甚至是创建选项的最佳方式吗?老实说,我觉得这是一件如此简单的事情,但我还是新手,我已经为此苦苦挣扎太久了!
任何想法/更改/ cmets / 方法来使它变得更好,将不胜感激!我意识到也许使用像 redux-form 这样的东西会使这更容易,但我希望现在有一种简单的方法可以做到这一点。
编辑:
onChange 应该设置为onChange = {this.handleChange},只是粘贴了我尝试进行故障排除的错误代码。我在构造函数中绑定了这个:
constructor(props) {
super(props);
...
this.handleChange = this.handleChange.bind(this);
}
【问题讨论】:
-
我有一个关于这个相同结构的小问题。当我像这样使用它时:
<Animal name = {animal.name} age = {animal.age} clicked = {this.removeAnimal.bind(this, i)} setName = {this.setAnimalName.bind(this, i)} index = {i}/>这整个东西都在 js map 方法调用的参数箭头函数中。在setAnimalName方法中,我收到第二个对象作为事件对象,这是否可能?如果您有任何想法,请帮助我
标签: javascript reactjs react-bootstrap