当前位置: 首页 > 知识库问答 >
问题:

如何更新设置状态的对象数组[重复]

郎魁
2023-03-14

`正在尝试更新onclick中的对象数组。我有两个状态,即数组格式的“IntialValue”和“Todos”。当我检查react developer工具时,我可以看到有两种状态。该任务的流程是用户可以在输入文本框中输入文本,一旦用户点击了添加按钮,我想把它添加为对象数组,我保留了一个布尔字段和Id字段。我面临的问题是我能正确地得到“InputValue”。我还得到了对象的数组,但不是在“todos”状态,并且这些值不是以数组格式更新的,只是改变了输入值。例如:0{completed:false,id:20,text:abc}当我单击add按钮时,数组不会更新为1{completed:false,id:20,text:cde},而是在第0个位置更新值。我已经添加了下面的代码,任何一个可以帮助我实现输出。提前道谢。

class TodoForm extends Component {
  constructor(props) {
    super(props);
    this.state = {
      InputValue: "",
      todos: [],
    };
    console.log("intialvalue", this.state.InputValue);
  }

  handleChange(e) {
    this.setState({ InputValue: e.target.value });
  }

  handleSubmit(e) {
    //   alert("Form state value" + this.state.initalValue);
    e.preventDefault();
    this.setState([
      ...this.state.todos,
      {
        text: this.state.InputValue,
        completed: false,
        id: Math.random() * 1000,
      },
    ]);
  }
  render() {
    return (
      <div className="Todo">
        <form>
          <input
            type="text"
            value={this.state.InputValue}
            onChange={this.handleChange.bind(this)}
          ></input>
          <button onClick={this.handleSubmit.bind(this)}>Add</button>
        </form>
        <p>{this.state.InputValue}</p>
      </div>
    );
  }
}

export default TodoForm;

共有1个答案

姬朗
2023-03-14

您需要更新todo状态(不是完全状态)。您没有正确更新状态。应该是这样的:

this.setState({
      todos: [
        ...this.state.todos,
        {
          text: this.state.InputValue,
          completed: false,
          id: Math.random() * 1000
        }
      ]
    });

下面是演示:https://codesandbox.io/s/gracious-mountain-rdubi?file=/src/app.js

 类似资料:
  • 谁能告诉我我在这里做错了什么?从console.log,我可以看到日期功能正在正常工作。但是,即使在之后,时间戳也不会更新。提前感谢!

  • 我正在调用这个函数。因为它在增加值,但是当我访问它时,它返回以前的值。我想访问同一函数中最新更新的值,我应该做什么。 如何访问同一函数中的最新状态值

  • 问题内容: 我处于状态的对象数组: 我需要能够基于id属性搜索items数组,然后更新对象属性。 我可以使用id参数通过数组或在数组上获取对象。 我遇到的麻烦是更新数组,然后更新状态而不会发生突变。 此时,我有一个匹配的对象,可以使用对象传播来更新它的属性: 我的问题是我该如何更新状态,以使其覆盖初始查找操作返回的对象? 问题答案: 您的更新功能如下所示 你这样使用它 毛吧? 如果您继续以这种方式

  • 问题内容: 我有一个称为状态的对象数组。 说我有功能 这里的问题是,每次调用时,整个数组都会更新,因此整个DOM都将重新呈现。在我的情况下,这导致浏览器冻结,因为我几乎每秒都要调用此函数,并且有很多对象。但是,在每次通话中,实际上仅更新其中一个或两个设备。 我有什么选择? 编辑 在我的确切情况下,a 是一个定义如下的对象: 因此,数组中的每个项目都是this的特定瞬间,即我所拥有的某个地方: 我更

  • 对于我正在使用的插件,我必须具有如下状态: 如何在不设置其余访问权限的情况下设置hospital_id状态? 这似乎删除了一切,但hospital_id:

  • 问题内容: 我已经检索了使用useState存储在对象数组中的数据,然后将这些数据输出到表单字段中。现在,我希望能够在键入时更新字段(状态)。 我看过一些例子,说明人们在更新数组中属性的状态,但是从不更新对象数组中的状态,所以我不知道该怎么做。我已经将对象的索引传递给了回调函数,但是我不知道如何使用它来更新状态。 问题答案: 这是您的操作方式: