Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用react中的useState方法从数组中删除上一个对象_Javascript_Reactjs_Use State - Fatal编程技术网

Javascript 使用react中的useState方法从数组中删除上一个对象

Javascript 使用react中的useState方法从数组中删除上一个对象,javascript,reactjs,use-state,Javascript,Reactjs,Use State,我的代码 import React,{useState}来自“React”; 导入“/styles.css”; 导出默认函数App(){ const MAX_数量=10; 常数最小值=0; const[count,setCount]=useState(0); const[items,setItems]=useState([{id:0}]); 常量附加项=()=>{ 设置项([ …项目, { id:计数+1 } ]); 控制台日志(项目); }; 常数项=()=>{ setItems([{id:0

我的代码

import React,{useState}来自“React”;
导入“/styles.css”;
导出默认函数App(){
const MAX_数量=10;
常数最小值=0;
const[count,setCount]=useState(0);
const[items,setItems]=useState([{id:0}]);
常量附加项=()=>{
设置项([
…项目,
{
id:计数+1
}
]);
控制台日志(项目);
};
常数项=()=>{
setItems([{id:0}])
控制台日志(项目);
}
函数add(){
如果(计数<最大数量){
设置计数(计数+1);
addItem();
}
}
函数负(){
如果(计数>最小数量){
设置计数(计数-1);
稳定项目()
}
}
返回(
{count}
+
-
);
}
我的问题是,虽然我可以始终将一个项目添加到我的项目数组中,但当按下“-”按钮时,我无法删除以前添加的项目。作为测试,我设置了“minusItem”函数,将数组设置回初始状态,但您会注意到,在按下“-”按钮后,另一个对象在设置之前添加到数组中,这是为什么

我只是尝试在按下“+”或“-”按钮时向数组中添加和减去项。任何关于如何做到这一点的建议都将不胜感激

const{useState}=React;
函数App(){
const MAX_数量=10;
常数最小值=0;
const[count,setCount]=React.useState(0);
const[items,setItems]=React.useState([{
身份证号码:0
}]);
常量附加项=()=>{
设置项([
…项目,
{
id:计数+1
}
]);
控制台日志(项目);
};
常数项=()=>{
setItems(previItems=>previItems.slice(0,-1));
控制台日志(项目);
}
函数add(){
如果(计数<最大数量){
设置计数(计数+1);
addItem();
}
}
函数负(){
如果(计数>最小数量){
设置计数(计数-1);
稳定项目()
}
}
报税表(<
div className=“应用程序”>
<
h1>{
计数
}<
按钮onClick={
添加
}>+<
按钮onClick={
减
}>-<
/div>
);
}
//渲染它
ReactDOM.render(
,
document.getElementById(“react”)
);

要从数组中删除最后一项,并将其分配给状态。我更喜欢使用
slice

constminusitem=()=>setItems(previitems=>previitems.slice(0,-1));

由于您不想删除数组中的特定元素,您只需
pop()
数组中的最后一个元素并更新状态即可。@ShawnYap您能否提供一个sudo代码示例来了解它的外观。我实现了您对上面的实时代码片段的偏好,虽然它确实起作用,但控制台似乎指示在删除对象之前先添加对象。e、 g如果您单击“+”两次,您将看到该数组有两个对象,单击“-”,然后将一个对象添加到该数组中,但如果我随后按“-”,则会看到预期的两个对象。这是正确的行为吗?事实上我想我可能知道发生了什么。我想可能是这样的,我在控制台中看到了阵列的当前和以前的状态,这就是我看到效果的原因。我删除了控制台日志并将它们放在函数中的其他位置,现在看到了期望的效果。
import React, { useState } from "react";
import "./styles.css";

export default function App() {
  const MAX_QUANTITY = 10;
  const MIN_QUANTITY = 0;
  const [count, setCount] = useState(0);
  const [items, setItems] = useState([{ id: 0 }]);

  const addItem = () => {
    setItems([
      ...items,
      {
        id: count + 1
      }
    ]);
    console.log(items);
  };

  const minusItem = () => {
    setItems([{ id: 0 }])

    console.log(items);
  }

  function add() {
    if (count < MAX_QUANTITY) {
      setCount(count + 1);
      addItem();
    }
  }

  function minus() {
    if (count > MIN_QUANTITY) {
      setCount(count - 1);
      minusItem()
    }
  }

  return (
    <div className="App">
      <h1>{count}</h1>
      <button onClick={add}>+</button>
      <button onClick={minus}>-</button>
    </div>
  );
}