阅读反应中的 excel 后,我的 excel(json) 数据未在使用状态(设置项)中更新
After reading the excel in the react , my excel(json) data is not geting updated in the usestate (setItems)
因为我是这个项目的新手,所以任何人都可以帮助摆脱这个。
我已成功读取 excel 并将其转换为 JSON 之后,它在控制台中成功显示,但是当我在 setItems 中更新它以呈现数据时在 table 中,它没有得到更新。
我上传了我的代码,请检查。
const [items, setItems] = useState([]);
const readfiles = (file, e) => {
const p = new Promise((resolve, reject) => {
const filereader = new FileReader();
filereader.readAsArrayBuffer(file);
filereader.onload = (e) => {
const bufferArray = e.target.result;
const wb = XLSX.read(bufferArray, {
type: "buffer",
});
const ws = wb.Sheets[wb.SheetNames[0]];
const data = XLSX.utils.sheet_to_json(ws);
resolve(data);
};
filereader.onerror = (error) => {
reject(error);
};
});
p.then((d) => {
console.log("data", d);
setItems(d);
console.log(items)
});
};
在 console.log("data", d) 中它显示数据,但在 console.log(items) 中它什么也不显示。
enter image description here
这是我的 table jsx
return (
<div style={MainStyle}>
<input
type="file"
onChange={(e) => {
const file = e.target.files[0];
readfiles(file);
}}
/>
<Container>
<Table>
<thead>
<tr>
<th>Time</th>
<th>Territory name</th>
<th>territory date</th>
</tr>
</thead>
<tbody>
{items?.map((d) => {
<tr key={d.territory_name}>
<td>{d.Hours}</td>
<td>{d.territory_name}</td>
<td>{d.timeoff_period}</td>
</tr>;
})}
</tbody>
</Table>
</Container>
</div>
);
数据未在 table..
中呈现
React 挂钩是 异步的 ,这意味着您可能无法在通过 [=12] 设置 之后 立即访问数据=].
如果你真的想用它(不只是console.log()
它),你可以利用useEffect
,将状态作为第二个参数传递。更多关于 useEffect
here.
编辑:对于你的第二个问题,你要么 return
:
<tbody>
{items?.map((d) => {
return (<tr key={d.territory_name}>
<td>{d.Hours}</td>
<td>{d.territory_name}</td>
<td>{d.timeoff_period}</td>
</tr>);
})}
</tbody>
或者您将 {}
替换为 ()
:
<tbody>
{items?.map((d) => (
<tr key={d.territory_name}>
<td>{d.Hours}</td>
<td>{d.territory_name}</td>
<td>{d.timeoff_period}</td>
</tr>;
))}
</tbody>
因为我是这个项目的新手,所以任何人都可以帮助摆脱这个。
我已成功读取 excel 并将其转换为 JSON 之后,它在控制台中成功显示,但是当我在 setItems 中更新它以呈现数据时在 table 中,它没有得到更新。
我上传了我的代码,请检查。
const [items, setItems] = useState([]);
const readfiles = (file, e) => {
const p = new Promise((resolve, reject) => {
const filereader = new FileReader();
filereader.readAsArrayBuffer(file);
filereader.onload = (e) => {
const bufferArray = e.target.result;
const wb = XLSX.read(bufferArray, {
type: "buffer",
});
const ws = wb.Sheets[wb.SheetNames[0]];
const data = XLSX.utils.sheet_to_json(ws);
resolve(data);
};
filereader.onerror = (error) => {
reject(error);
};
});
p.then((d) => {
console.log("data", d);
setItems(d);
console.log(items)
});
};
在 console.log("data", d) 中它显示数据,但在 console.log(items) 中它什么也不显示。
enter image description here
这是我的 table jsx
return (
<div style={MainStyle}>
<input
type="file"
onChange={(e) => {
const file = e.target.files[0];
readfiles(file);
}}
/>
<Container>
<Table>
<thead>
<tr>
<th>Time</th>
<th>Territory name</th>
<th>territory date</th>
</tr>
</thead>
<tbody>
{items?.map((d) => {
<tr key={d.territory_name}>
<td>{d.Hours}</td>
<td>{d.territory_name}</td>
<td>{d.timeoff_period}</td>
</tr>;
})}
</tbody>
</Table>
</Container>
</div>
);
数据未在 table..
中呈现React 挂钩是 异步的 ,这意味着您可能无法在通过 [=12] 设置 之后 立即访问数据=].
如果你真的想用它(不只是console.log()
它),你可以利用useEffect
,将状态作为第二个参数传递。更多关于 useEffect
here.
编辑:对于你的第二个问题,你要么 return
:
<tbody>
{items?.map((d) => {
return (<tr key={d.territory_name}>
<td>{d.Hours}</td>
<td>{d.territory_name}</td>
<td>{d.timeoff_period}</td>
</tr>);
})}
</tbody>
或者您将 {}
替换为 ()
:
<tbody>
{items?.map((d) => (
<tr key={d.territory_name}>
<td>{d.Hours}</td>
<td>{d.territory_name}</td>
<td>{d.timeoff_period}</td>
</tr>;
))}
</tbody>