【发布时间】:2021-06-30 16:17:25
【问题描述】:
我的页面如下:
import React, { useState, useEffect } from "react";
import { getShopConfiguration, updateShopConfiguration } from '../../../api/shopConfig'
import MaterialTable from "material-table";
import Check from '@material-ui/icons/Check';
import Clear from '@material-ui/icons/Clear';
import Edit from '@material-ui/icons/Edit';
import ViewColumn from '@material-ui/icons/ViewColumn';
import { forwardRef } from 'react';
const ConfigurationTable = (props) => {
const [loadingData, setLoadingData] = useState(true);
const columns = [
{
title: "Type",
field: "flag",
editable: 'never'
},
{
title: "Value",
field: "value",
}
];
const [data, setData] = useState([]);
useEffect(() => {
if (loadingData || props.selectedShop) {
getConfiguration(props.selectedShop);
}
}, [props.selectedShop, loadingData]);
const getConfiguration = async (shop) => {
var currentShop
if (shop) {
currentShop = shop.value
}
const response = await (await getShopConfiguration(currentShop)).data;
setData(response);
setLoadingData(false);
}
const tableIcons = {
Check: forwardRef((props, ref) => <Check {...props} ref={ref} />),
Clear: forwardRef((props, ref) => <Clear {...props} ref={ref} />),
Edit: forwardRef((props, ref) => <Edit {...props} ref={ref} />),
ViewColumn: forwardRef((props, ref) => <ViewColumn {...props} ref={ref} />)
};
const updateTableData = (newData, oldData) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
const dataUpdate = [...data];
const index = oldData.tableData.id;
dataUpdate[index] = newData;
setData([...dataUpdate]);
resolve();
}, 300)
})
}
const saveConfig = async () => {
var currentShop
if (props.selectedShop) {
currentShop = props.selectedShop.value
}
await updateShopConfiguration(currentShop, data);
}
return (
<div>
<div><label className="label" >{props.configLabel}</label></div>
<div>
{
{loadingData ? (
<p>Loading Please wait...</p>
) : (
<MaterialTable
icons={tableIcons}
options={{
toolbar: false,
paging: false
}}
columns={columns}
data={data}
editable={{
onRowUpdate: (newData, oldData) => updateTableData(newData, oldData)
}}
/>
)}
</div>
<div style={{marginTop:'50px'}}>
<button onClick = {saveConfig} >Save Changes</button>
</div>
</div>
);
}
export default ConfigurationTable
当我在表格中的任何行上单击铅笔图标时,在更新列数据时,我希望禁用页面下方的“保存更改”按钮。我该怎么做?
目前,当我单击铅笔图标并在行中编辑/输入一个值时,我可以按“保存更改”,但我需要在我之后启用“保存更改”已单击刻度线/叉号,这意味着我已完成对记录的编辑。
【问题讨论】:
-
我建议添加一个为真/假的状态,例如“isEditing”,当单击铅笔图标时,您将更新状态,当用户“取消”对话框时,它将再次更新状态.然后将其传递给按钮,如 disabled={isEditing}
-
请提供一个可复制的例子,例如codesandbox。
标签: reactjs material-ui