javascript - 如何在表单的选择字段 onChange 中传递对象值(使用 React,不使用 Redux)

标签 javascript reactjs react-bootstrap

我目前正在开发一个具有简单形式的 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,但我觉得这不是正确的方法。我也考虑过只在获得名称后搜索对象,但如果有很多对象,我认为那会非常低效吗?我也不确定该怎么做。

任何人都可以帮我找到一种方法来传递这两个额外的值,以便我可以设置状态吗? map 甚至是创建选项的最佳方式吗?老实说,我觉得这是一件很简单的事情,但我对 react 还是陌生的,而且我已经为此苦苦挣扎了太久了!

如果有任何想法/更改/评论/方法可以使它变得更好,我们将不胜感激!我意识到也许使用像 redux-form 这样的东西会让这更容易,但我希望现在有一种简单的方法可以做到这一点。

编辑: onChange 应该设置为 onChange = {this.handleChange},只是粘贴了我尝试进行故障排除时的错误代码。我在构造函数中绑定(bind)它:

constructor(props) {
  super(props);
  ...
  this.handleChange = this.handleChange.bind(this);
}

最佳答案

使用用户 ID 作为每个 option 中的值,然后在 handleChange 中找到您的 userlist 中的用户以访问该用户的所有属性:

<FormControl
   id = "user"
   componentClass="select"
   onChange={this.handleChange.bind(this)}
>
   {userlist.map((r , i) =>
     <option
       key={i}
       value={r.id}>
       {r.name}
     </option>
  )}
</FormControl>

handleChange(event) {
  const userId = event.target.value;
  const user = userlist.find(u => u.id === userId);
  this.setState({
    value: user
  });
}

此外,您传递 onChange 属性的方式可能会导致问题。如果不查看所有代码就很难判断,但请确保传递对 handleChange 函数的引用(见上文我的回答),而不是就在那里调用它(如你的问题:onChange={this.handleChange()},除非你的 this.handleChange 函数返回一个函数)。

关于javascript - 如何在表单的选择字段 onChange 中传递对象值(使用 React,不使用 Redux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48159169/

相关文章:

javascript - 简单的 jQuery .each 问题

reactjs - React Router v4 路由不起作用

javascript - 将多个操作传递给 react-bootstrap 按钮中的 onClick 事件

javascript - 如何更改表格数据以与模式中的按钮 react

javascript - 在 ** :**:00 处重复 javascript 函数

javascript - 获取 $(this).val() 的下一个元素

javascript - 如何在解析 json 时跳过 <br> 或任何字符串

android - 使用react-navigation在屏幕之间导航

javascript - 没有为 FingerprintJS 定义 ReferenceError 导航器

javascript - 如何在 NavBar 中做出 onClick 事件 react ?