如何使用 reactJs 和 React Hooks 将数据存储和填充到 dataGrid 或 table 中?
How to store and populate data into dataGrid or table using reactJs and reactHooks?
我正在尝试从表单中获取用户输入数据并将其显示在下面的 table/Datagrid 中。但是我没有得到正确的输出。
请看下面的流程
当用户提交表单并点击立即发送按钮时,{handlSubmit} 函数触发并将值存储在 useState hooks(values) 中。 然后我尝试检索相同的值并将其填充到下面的数据网格中。
请查看底部提供的沙箱 link 上的完整源代码。
非常感谢任何帮助或建议,并提前致谢。
请参阅下图以获取当前阶段的参考和输出。
注意:Datagrid组件中的rows属性只接受数组类型
源代码:
import React, { useState } from "react";
import { DataGrid } from "@mui/x-data-grid";
import { Box, Button, Divider, Paper, Stack, TextField } from "@mui/material";
const Send = () => {
const [values, setValues] = useState({
addressTo: "",
amount: "",
message: ""
});
const [storeData, setStoreData] = useState([]);
const handleChange = (e) => {
e.preventDefault();
setValues((values) => ({
...values,
[e.target.name]: e.target.value
}));
};
const handleSubmit = (e) => {
e.preventDefault();
console.log(values);
setStoreData(Object.values(values));
};
const columns = [
{ field: "id", headerName: "ID", width: 70, align: "left", flex: 4 },
{
field: "AddressTo",
headerName: "Address To",
width: 130,
align: "left",
flex: 4
},
{
field: "Amount",
headerName: "Amount (in Eth)",
width: 130,
align: "left",
flex: 4
},
{
field: "Message",
headerName: "Message",
type: "text",
width: 90,
align: "left",
flex: 4
}
];
const newId = new Date();
const rows = storeData?.map((row) => ({
id: newId.toISOString(),
Amount: `${row.amount}`,
AddressTo: `${row.addressTo}`,
Message: `${row.message}`
}));
return (
<>
<Box className="frominputs">
<form onSubmit={handleSubmit}>
<TextField
name="addressTo"
value={values.addressTo}
onChange={handleChange}
required
fullWidth
margin="dense"
id="outlined-addressTo-input"
placeholder="Address To"
type="text"
/>
<TextField
name="amount"
value={values.amount}
onChange={handleChange}
required
fullWidth
margin="dense"
id="outlined-amount-input"
placeholder="Amount in Eth"
type="number"
/>
<TextField
name="message"
value={values.message}
onChange={handleChange}
required
fullWidth
margin="dense"
id="outlined-message-input"
placeholder="Message"
type="text"
/>
<Divider
sx={{
background: "white",
opacity: "0.7",
marginTop: "5%",
marginBottom: "5%"
}}
/>
<Button
color="inherit"
sx={{ border: "1px solid white", width: "100%", height: "45px" }}
type="submit"
>
Send Now
</Button>
</form>
</Box>
<Box className="datatable" sx={{ height: 363 }}>
<DataGrid
rows={rows}
columns={columns}
pageSize={5}
rowsPerPageOptions={[5]}
disableSelectionOnClick={true}
sx={{ m: 2, width: "100%" }}
/>
</Box>
</>
);
};
export default Send;
您正在尝试映射列表,但没有将 values
设置为 StoreData
挂钩中的列表。下面的 handleSubmit
函数应该可以修复它
const handleSubmit = (e) => {
e.preventDefault();
console.log(values);
setStoreData([...storeData, values]);
};
我检查了代码有多个错误,我在这个 fork 中修复了它们:https://codesandbox.io/s/sencrypapp-forked-kon8qh?file=/src/Send.jsx
大多数与打字问题有关,因此 TS 可能是您的好工具。
您提供的 ID 对于所有项目都是相同的 ID,我将 ID 更改为数字以使其有效,如果您想要日期 ID,则应将其添加到 handleSubmit 方法中的数据中。
我正在尝试从表单中获取用户输入数据并将其显示在下面的 table/Datagrid 中。但是我没有得到正确的输出。
请看下面的流程
当用户提交表单并点击立即发送按钮时,{handlSubmit} 函数触发并将值存储在 useState hooks(values) 中。 然后我尝试检索相同的值并将其填充到下面的数据网格中。
请查看底部提供的沙箱 link 上的完整源代码。 非常感谢任何帮助或建议,并提前致谢。
请参阅下图以获取当前阶段的参考和输出。
注意:Datagrid组件中的rows属性只接受数组类型
源代码:
import React, { useState } from "react";
import { DataGrid } from "@mui/x-data-grid";
import { Box, Button, Divider, Paper, Stack, TextField } from "@mui/material";
const Send = () => {
const [values, setValues] = useState({
addressTo: "",
amount: "",
message: ""
});
const [storeData, setStoreData] = useState([]);
const handleChange = (e) => {
e.preventDefault();
setValues((values) => ({
...values,
[e.target.name]: e.target.value
}));
};
const handleSubmit = (e) => {
e.preventDefault();
console.log(values);
setStoreData(Object.values(values));
};
const columns = [
{ field: "id", headerName: "ID", width: 70, align: "left", flex: 4 },
{
field: "AddressTo",
headerName: "Address To",
width: 130,
align: "left",
flex: 4
},
{
field: "Amount",
headerName: "Amount (in Eth)",
width: 130,
align: "left",
flex: 4
},
{
field: "Message",
headerName: "Message",
type: "text",
width: 90,
align: "left",
flex: 4
}
];
const newId = new Date();
const rows = storeData?.map((row) => ({
id: newId.toISOString(),
Amount: `${row.amount}`,
AddressTo: `${row.addressTo}`,
Message: `${row.message}`
}));
return (
<>
<Box className="frominputs">
<form onSubmit={handleSubmit}>
<TextField
name="addressTo"
value={values.addressTo}
onChange={handleChange}
required
fullWidth
margin="dense"
id="outlined-addressTo-input"
placeholder="Address To"
type="text"
/>
<TextField
name="amount"
value={values.amount}
onChange={handleChange}
required
fullWidth
margin="dense"
id="outlined-amount-input"
placeholder="Amount in Eth"
type="number"
/>
<TextField
name="message"
value={values.message}
onChange={handleChange}
required
fullWidth
margin="dense"
id="outlined-message-input"
placeholder="Message"
type="text"
/>
<Divider
sx={{
background: "white",
opacity: "0.7",
marginTop: "5%",
marginBottom: "5%"
}}
/>
<Button
color="inherit"
sx={{ border: "1px solid white", width: "100%", height: "45px" }}
type="submit"
>
Send Now
</Button>
</form>
</Box>
<Box className="datatable" sx={{ height: 363 }}>
<DataGrid
rows={rows}
columns={columns}
pageSize={5}
rowsPerPageOptions={[5]}
disableSelectionOnClick={true}
sx={{ m: 2, width: "100%" }}
/>
</Box>
</>
);
};
export default Send;
您正在尝试映射列表,但没有将 values
设置为 StoreData
挂钩中的列表。下面的 handleSubmit
函数应该可以修复它
const handleSubmit = (e) => {
e.preventDefault();
console.log(values);
setStoreData([...storeData, values]);
};
我检查了代码有多个错误,我在这个 fork 中修复了它们:https://codesandbox.io/s/sencrypapp-forked-kon8qh?file=/src/Send.jsx
大多数与打字问题有关,因此 TS 可能是您的好工具。 您提供的 ID 对于所有项目都是相同的 ID,我将 ID 更改为数字以使其有效,如果您想要日期 ID,则应将其添加到 handleSubmit 方法中的数据中。