【问题标题】:How to get the id in Material Table?如何获取材料表中的 id?
【发布时间】:2019-11-12 00:49:49
【问题描述】:

我正在使用“material-table”:“1.53.0”,带有可编辑和 onRowUpdate 选项,我想更新表中的数据。 我在用axios调用put方法,可以很好的看到tab数据但是修改任意字段的时候点击保存

我看到以下错误:

xhr.js:166 PUT http://localhost:xxxx/api/User/edit/?IdUser=1 404 (Not Found)

我意识到,无论我想更新哪一行,它总是告诉我我正在为 id 调用 1 并且没有发送 IdUser,但是因为我这样做是正确的

获取该行的idUser的方法是什么?

import React, { useState, useEffect } from 'react';
import MaterialTable from 'material-table';
import  axios  from 'axios';

export default function UserTable() {

const url='/api/Users';

const [user, setUser]= useState({DataUser:[]});


 useEffect(()=>{
    const getUser=async()=>{
            const response =await axios.get(url);
            setUser(response.data);
    }
    getUser();
},[]);

  return (
    <MaterialTable
    title="Users"
    columns={[
      {title: 'IdUser',field: 'IdUser', type: 'numeric', hidden:'false'},
      {title: 'name',field: 'name'},
      { title: 'lastname', field: 'lastname' },
      { title: 'age', field: 'age', type: 'numeric' },
    ]}
    data={user.DataUser}
    options={{
      filtering: true
    }}
    editable={{
      onRowUpdate: (newData, oldData) =>
      new Promise(resolve => {
          setTimeout(() => {
          resolve();
          const data=[...user.DataUser];
          data[data.indexOf(oldData)] = newData;
          axios.put('api/User/edit/', newData,{
                  params: {
                    id:user.DataUser[0].IdUser
                  }
              })
              .then(res => console.log(res.DataUser));
              setUser({...user,data});
      }, 600);
  }),
  }}
  />
);
}

【问题讨论】:

    标签: reactjs material-table


    【解决方案1】:

    您应该访问在回调中作为newData 传递的用户的ID,而不是使用user.DataUser[0].IdUser 传递第一个用户ID。

    所以更改 axios 调用应该可以解决问题:

    editable={{
      onRowUpdate: (newData, oldData) =>
      new Promise(resolve => {
          setTimeout(() => {
          resolve();
          const data=[...user.DataUser];
          data[data.indexOf(oldData)] = newData;
          axios.put('api/User/edit/', newData,{
                  params: {
                    id: newData.IdUser
                  }
              })
              .then(res => console.log(res.DataUser));
              setUser({...user,data});
      }, 600);
    

    【讨论】:

    • 它已更新但我仍然抛出相同的错误 PUT http://localhost:xxxx/api/User/edit/? IdUser = 1 404(未找到),我必须重新加载页面以显示更改
    • 你能用 console.log setUser({...user,data}) 看看是否返回了正确的数组吗?
    • console.log setUser ({... user, data}),抛出未定义但在执行 console.log ('new Data.IdUser') 时,如果它抛出正确的 id
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多