Javascript Reactjs按键和值筛选状态

Javascript Reactjs按键和值筛选状态,javascript,arrays,reactjs,state,Javascript,Arrays,Reactjs,State,我是新手 我正在尝试匹配位于我所在州的特定id的值,以便在通过api更新数据库之前更改一些值 这个州是 state = { library: [] } 当axios改变状态时,阵列看起来像: 0:{_id:"", time:"", value:""}, 2:{_id:"", time:"", value:""} 当我运行console.log时,它是这样读的 (2) [{…}, {…}]0: {_id: "5c82803ad634ea0bebfb3eff", time: "2019-03-0

我是新手

我正在尝试匹配位于我所在州的特定id的值,以便在通过api更新数据库之前更改一些值

这个州是

state = {
library: []
}
当axios改变状态时,阵列看起来像:

0:{_id:"", time:"", value:""},
2:{_id:"", time:"", value:""}
当我运行console.log时,它是这样读的

(2) [{…}, {…}]0: {_id: "5c82803ad634ea0bebfb3eff", time: "2019-03-08T14:46:18.663Z", value:""}1: {_id: "5c827fb9d634ea0bebfb3efe", time: "2019-03-08T14:44:09.818Z", value:""}
所以基本上,当我输入一个特定的输入字段,由它的_id标识时,我需要更新该特定状态的值状态

这是我到目前为止写的代码_id是输入字段的唯一键和我正在键入的事件值

updateRead = (_id, event) => {
    console.log(_id);
    console.log(event.target.value)
    this.setState(?????)
};
非常感谢您的帮助

干杯

您可以在您所在州的库数组上使用array方法,如果_id不匹配,则按原样返回元素,如果_id匹配,则更新值

updateRead = (_id, event) => {
  const { value } = event.target;

  this.setState(prevState => ({
    library: prevState.library.map(read => {
      if (read._id !== _id) {
        return read;
      }
      return {
        ...read,
        value
      };
    })
  }));
};
在您的状态下,您可以对库数组使用array方法,如果_id不匹配,只需按原样返回元素,如果_id匹配,则更新值

updateRead = (_id, event) => {
  const { value } = event.target;

  this.setState(prevState => ({
    library: prevState.library.map(read => {
      if (read._id !== _id) {
        return read;
      }
      return {
        ...read,
        value
      };
    })
  }));
};

React中的两个基本状态规则是:

基于现有状态设置状态时,请使用setState的回调版本 另外,在事件处理程序返回后,您无法访问合成事件的属性,因此您需要在调用setState之前获取该值,因为对回调的调用将是异步的

在回调中,复制数组,找到相关对象,复制它,然后设置值

因此:


映射从上一个数组的条目创建一个新数组。如果ID使用属性扩展表示法与更新值匹配,则回调将返回一个新对象,或者返回原始对象,因为我们不必复制未修改的对象。

React中的两个基本状态规则是:

基于现有状态设置状态时,请使用setState的回调版本 另外,在事件处理程序返回后,您无法访问合成事件的属性,因此您需要在调用setState之前获取该值,因为对回调的调用将是异步的

在回调中,复制数组,找到相关对象,复制它,然后设置值

因此:

映射从上一个数组的条目创建一个新数组。如果ID使用属性扩展表示法与更新值匹配,则回调将返回一个新对象,或者返回原始对象,因为我们不必复制未修改的对象。

哇,在回答中讨论类似的代码。:-我想只有这么多方法可以做到这一点。由于解释的原因,我还是会留下我的答案,但这真的很有趣。哇,在答案中谈论类似的代码。:-我想只有这么多方法可以做到这一点。我会留下我的答案,因为解释,但这真的很有趣。