【发布时间】:2020-02-01 10:19:25
【问题描述】:
如果我尝试更新的状态在用户数组之外,则更新状态有效。但是由于我有多个用户,所以我需要将状态放在对象内部并无论如何都要更新
我不断收到错误TypeError: Cannot read property 'name' of undefined
我曾想过在循环内设置状态,但有人告诉我这是个坏主意。
所以[e.target.name]: e.target.value 是我能找到的唯一下拉代码。
我尝试为每个用户传递 id,但不知道如何使用它来更改状态或放置什么条件。
import React, { Component } from 'react'
export default class App extends Component {
state = {
users: [
{
id: uuid(),
firstName: 'John',
lastName: 'Doe',
favColor: 'None'
},
{
id: uuid(),
firstName: 'Jane',
lastName: 'Doe',
favColor: 'None'
}
]
}
handleChange = (e) => {
this.setState({
[e.target.name]: e.target.value
})
}
render() {
return (
<div>
{this.state.users.map((user) => {
return <div key={user.id}>
<h1>{user.firstName}</h1>
<h1>{user.lastName}</h1>
<form>
<select
name="favColor"
value={user.favColor}
onChange={() => this.handleChange(user.id)}
>
<option value="None" disabled>None</option>
<option value="Blue">Blue</option>
<option value="Red">Red</option>
<option value="Green">Green</option>
</select>
</form>
<h1>Fav Color: {user.favColor}</h1>
<hr />
</div>
})}
</div>
)
}
}
我希望下拉菜单为每个用户单独更改状态
【问题讨论】:
-
像这样改变 onChange :
onChange={(e) => this.handleChange(e) -
你想要的状态结构是什么?加上
e.target.name是选择的名称。 -
@rapSherlock 似乎已经消除了错误并在 React 工具中显示状态正在更新,但在 UI 中没有显示任何更改
-
因为你的用户状态是数组
标签: javascript reactjs select state dropdown