Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.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 ReactJS:如何在数组状态下更新数据_Javascript_Reactjs_Typescript_Next.js - Fatal编程技术网

Javascript ReactJS:如何在数组状态下更新数据

Javascript ReactJS:如何在数组状态下更新数据,javascript,reactjs,typescript,next.js,Javascript,Reactjs,Typescript,Next.js,如何在不追加新数据的情况下更新数组列表。因为我尝试了这个setRowData(arr=>[…arr,response['data'])然后它继续追加数据 相反,它将更新它将附加到其上的数组中的值。我认为您不需要扩展运算符。。您可以只使用array.map()。。也许这样的事情会对你有所帮助 const [rowData, setRowData] = useState([]); const old = {id: 'stud1', name: 'jake', room: '2'};

如何在不追加新数据的情况下更新数组列表。因为我尝试了这个
setRowData(arr=>[…arr,response['data'])然后它继续追加数据


相反,它将更新它将附加到其上的数组中的值。

我认为您不需要扩展运算符。。您可以只使用array.map()。。也许这样的事情会对你有所帮助

    const [rowData, setRowData] = useState([]);
    const old = {id: 'stud1', name: 'jake', room: '2'};
    const newData = {name: 'jake', room: '3A'};

    useEffect(() => {
        let ignore = false;
        (async function getUsers() {
          let response = await getAll({ length: 999 });
          if (!ignore) setRowData(response['data']['data']);
        })()
        return () => {
          ignore = true;
        }
      }, []);

    (async function updateItem() {
              await update(oldData.id, newData).then(response => {
//value of response['data'] = {id: 'stud1', name: 'jake', room: '3A'}
                setRowData(arr => [...arr, response['data']]);
              }).catch(err => {
                console.log(err);
              })
            })()

然后,您可以将x用于setRowData(x)

因为您想要更新状态数组中的一个项目,所以您可以使用map并基于如下id更新该项目

const old = [{id: 'stud1', name: 'jake', room: '2'},{id: 'stud2', name: 'jack', room: '2'}];
const newData = {id: 'stud1', name: 'jakey', room: '3A'};

const x = old.map((stud) => {
  if(stud.id === newData.id){
    stud = newData;
  }
  return stud;
});
console.log(x);

rowData数组包含什么以及什么是响应['data'];我试图更新数据。然后,阵列上的所有数据都将被删除similar@BeginnerCoder我不明白你的意思。你是说数组中的所有内容都会用新对象更新吗?
  (async function updateItem() {
      await update(oldData.id, newData).then(response => {
        setRowData(arr => arr.map(item => {
                if (item.id === response.data.id) {
                     return response.data;
                }
                return item;
         });
      }).catch(err => {
        console.log(err);
      })
    })()