reactjs 在React中使用带有spread运算符的previous State [duplicate]

3htmauhk  于 2023-03-22  发布在  React
关注(0)|答案(1)|浏览(109)

此问题在此处已有答案

Why React useState with functional update form is needed?(5个答案)
昨天关门了。
我正在学习React,我有一个问题。有时候当我们想要设置一个新值时,我们会使用先前的State:

import React, { useState } from "react";

function HookCounter() {
  const initialCount = 0;
  const [count, setCount] = useState(initialCount);
  return (
    <div>
      Count: {count}
      <button onClick={() => setCount(initialCount)}>Reset</button>
      <button onClick={() => setCount((prevState) => prevState + 1)}>
        Increment
      </button>
      <button onClick={() => setCount((prevState) => prevState - 1)}>
        Decrement
      </button>
    </div>
  );
}

export default HookCounter;

这是因为我们正在先前状态的基础上构建新状态。
这是否意味着如果我们使用spread操作符(例如在数组或对象中),我们不需要使用前一个State?因为spread已经给了我们前一个State?
例如

import React, { useState } from "react";

function ArrayCounter() {
  const [items, setItems] = useState([]);

  const addItem = () => {
    setItems([
      ...items,
      {
        id: items.length,
        value: Math.floor(Math.random() * 10) + 1,
      },
    ]);
  };
  return (
    <div>
      <button onClick={addItem}>Add a number</button>
      <ul>
        {items.map((item) => (
          <li key={item.id}>{item.value}</li>
        ))}
      </ul>
    </div>
  );
}

export default ArrayCounter;

谢谢大家!

nwsw7zdq

nwsw7zdq1#

在对象文字中,spread(...)语法枚举对象的属性,并将键值对添加到正在创建的对象中。
使用spread操作符,可以按对象items的值创建副本。
这是否意味着如果我们使用spread操作符(例如在数组或对象中),我们不需要使用前一个State?因为spread已经给了我们前一个State?
是,如果状态未被任何先前的调用更新。
有关点差操作员的更多信息,请阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

相关问题