Reactjs Can';t在未安装的组件上执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。在材料上

Reactjs Can';t在未安装的组件上执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。在材料上,reactjs,react-hooks,material-table,Reactjs,React Hooks,Material Table,我是React的新手,尝试创建一个表时感到很笨拙。我想学习如何使用应该更好的挂钩。我已经读过了,但是我不知道如何使用isMount变量,或者如果必须返回数据和setDtata,我应该如何返回它。我使用的是Material Table,当我尝试刷新表内容时出现错误 首先,我创建了一个动作按钮。我想让用户点击按钮更改数据行。我设法更新了数据库中的数据,但我无法修改数据表,以便用户可以看到该帐户已生效 我现在尝试使用“可编辑”材质表属性。我没有使用操作按钮,而是在下面准备了一个下拉列表。但在onRow

我是React的新手,尝试创建一个表时感到很笨拙。我想学习如何使用应该更好的挂钩。我已经读过了,但是我不知道如何使用isMount变量,或者如果必须返回数据和setDtata,我应该如何返回它。我使用的是Material Table,当我尝试刷新表内容时出现错误

首先,我创建了一个动作按钮。我想让用户点击按钮更改数据行。我设法更新了数据库中的数据,但我无法修改数据表,以便用户可以看到该帐户已生效

我现在尝试使用“可编辑”材质表属性。我没有使用操作按钮,而是在下面准备了一个下拉列表。但在onRowUpdate函数中更新数据表(setTableData())时会出现错误

这是我的密码:

function useDataTable(props){
  const [data,setData] = useState([]);
  const translations = props.translations;

  useEffect(() => {
    setData(translations);
 },[translations]);

 return [data, setData];
}

function Table(props) {
  const [tableData, setTableData] = useDataTable(props);
  const lang = props.lang;
  const tableRef = React.createRef();
  return (
    <MaterialTable
      tableRef={tableRef}
      title="Translations"
      icons= {tableIcons}
      options = {{
        filtering: true,
        sorting: true,
      }}
      columns={columns}
      data={tableData} 
      editable={{        
        onRowUpdate: (newData, oldData) =>
          new Promise((resolve, reject) => {
            const dataUpdate = [...tableData];
            console.log("Data update", dataUpdate);
            dataUpdate[oldData.tableData.id] = newData;
            //setTableData(...dataUpdate);   //Here is where the code explodes
            resolve();
          }),
      }}       
      actions={[        
        /*{
          icon: 'validate',
          tooltip: 'Validate',
          onClick : (event, rowData) => { 
            const validateUrl = urlTranslations +  lang + '/' + rowData._id
            console.log("Link will be " + validateUrl);
           /* axios.get(validateUrl)
            .then(response => {
              console.log(response.data);
              console.log("Props: ",props);
              setTableData(props);
            })            
            .catch(error => console.log("Error in GET ",error));* 
            let translation = props.translations.findIndex(f=> f._id === rowData._id);
            console.log("All data ",rowData);
            console.log("Props before: ",props.translations);
            props.translations[rowData.tableData.id].text = "test";
            console.log("Props after: ",props.translations);
            setTableData(props);
            tableRef.current.onQueryChange();

          }
        }*/
      ]}
    />
  )
}
函数useDataTable(props){
const[data,setData]=useState([]);
常量翻译=道具翻译;
useffect(()=>{
setData(翻译);
},[译文];
返回[数据,设置数据];
}
功能表(道具){
const[tableData,setTableData]=useDataTable(props);
const lang=props.lang;
const tableRef=React.createRef();
返回(
新承诺((解决、拒绝)=>{
常量数据更新=[…表数据];
日志(“数据更新”,数据更新);
dataUpdate[oldData.tableData.id]=newData;
//setTableData(…dataUpdate);//代码在这里爆炸
解决();
}),
}}       
动作={[
/*{
图标:“验证”,
工具提示:“验证”,
onClick:(事件,行数据)=>{
const validateUrl=urltransactions+lang+'/'+rowData.\u id
日志(“链接将是”+validateUrl);
/*axios.get(validateUrl)
。然后(响应=>{
console.log(response.data);
日志(“道具:”,道具);
可设置数据(props);
})            
.catch(error=>console.log(“GET中的错误”,error));*
让translation=props.translations.findIndex(f=>f.\u id==rowData.\u id);
console.log(“所有数据”,rowData);
日志(“Props before:”,Props.translations);
props.translations[rowData.tableData.id].text=“test”;
console.log(“Props后:”,Props.translations);
可设置数据(props);
tableRef.current.onQueryChange();
}
}*/
]}
/>
)
}
下面是docs和reading SO提问中的另一个示例,我还尝试创建一个表ref并使用tableRef.current.onQueryChange(),但出现了几个错误。我做错了什么?任何有助于了解发生了什么的事情都会很好