javascript - 使用现有状态更新/重置状态 - ReactJs
问题描述
我在这里很头疼。我有一些复选框。选中复选框后,您可以根据选中的复选框下载文档。下载完成后,我禁用了我的复选框,但它仍然被标记为选中。UI 方面,我通知用户此部分已下载。但是,如果用户从同一页面中选择另一个复选框,则会再次启用前一个复选框(因此不再禁用)。我的问题是如何更新或重置我的状态以禁用所有复选框并仅下载当前选择的文档而不下载以前的文档。
constructor(props) {
super(props);
this.state = { docList: {} }
之后这是我处理复选框的功能:
handleCheckboxClick = (e) => {
let parsedVal = JSON.parse(e.target.value);
let newDocList = { ...this.state.docList };
if (e.target.checked) {
newDocList[parsedVal.documentId] = parsedVal.documentNumber;
} else {
delete newDocList[parsedVal.documentId];
}
this.setState({
docList: newDocList,
}, () => {
console.log(this.state.docList)
});
之后是我的axios.post
方法:
axios.post(SERVER_URL + '/api/user/bills/zip', postZipData, axiosZipConfig)
.then((response) => {
this.setState({
downloadedIDS: response.data.downloadedIds,
docList: this.state.docList
}) e.preventDefault();
和渲染:
const { downloadedIDS, docList } = this.state;
render: rowData =>
<Checkbox
disabled={downloadedIDS && downloadedIDS.indexOf(rowData.documentId) >= 0 ? true : false}
color='default'
value={JSON.stringify({ documentId: rowData.documentId, documentNumber: rowData.documentNumber })}
onClick={this.handleCheckboxClick} />
欢迎任何建议我应该如何对待我的代码。
解决方案
在这个部分...
.then((response) => {
this.setState({
downloadedIDS: response.data.downloadedIds,
docList: this.state.docList
}) e.preventDefault();
您似乎正在downloadedIds
用刚刚返回的响应中的 ID 覆盖。如果我理解正确,您似乎应该将响应中的 ID 附加到downloadedIds
.
假设downloadedIds
这里是一个数组,您可以如何使用数组扩展运算符来实现这一点。
this.setState({
downloadedIds: [
...this.state.downloadedIds,
...response.data.downloadedIds
]
})
将 docList state 设置为 equal 没有意义,this.state.docList
只会将 state 设置为相同的东西,所以它不是必需的。
希望这会有所帮助,让我知道是否可以更详细地介绍。
推荐阅读
- python - pandas:如果列大于 x,如何获得选择两列的最大值,否则选择平均值?
- ruby-on-rails - Rails 5.2 到 6.0 的迁移命名空间升级问题:未初始化的常量错误
- sed - 如何在 .css 文件中查找一行,然后更改以下括号之间的相关配置
- coq - coqIDE 未正确连接项目中的文件且未编译
- python - 掷骰子并定义 dmg_to_enemy
- c++ - PyTorch 模型到 C++
- javascript - 在 href 中使用 javascript 变量出错了 - 为什么?
- javascript - 如何将此 jquery 代码转换为 JavaScript?
- javascript - 使用 setElementAttribute() 在 Javascript 中将索引作为参数传递
- python - PyQt5 小部件的动态创建/销毁