Javascript 使用现有状态更新/重置状态-ReactJs
我在这里有点头疼。我有一些复选框。选中复选框后,您可以根据选中的复选框下载文档。下载完成后,我禁用了复选框,但它仍然标记为选中。UI方面,我通知用户此部分已下载。但是,如果用户从同一页面中选择另一个复选框,则上一个复选框将再次启用(因此不再禁用)。我的问题是如何更新或重置我的状态,以便禁用所有复选框,并仅下载当前选定的文档,而不是以前的文档Javascript 使用现有状态更新/重置状态-ReactJs,javascript,reactjs,axios,state,Javascript,Reactjs,Axios,State,我在这里有点头疼。我有一些复选框。选中复选框后,您可以根据选中的复选框下载文档。下载完成后,我禁用了复选框,但它仍然标记为选中。UI方面,我通知用户此部分已下载。但是,如果用户从同一页面中选择另一个复选框,则上一个复选框将再次启用(因此不再禁用)。我的问题是如何更新或重置我的状态,以便禁用所有复选框,并仅下载当前选定的文档,而不是以前的文档 constructor(props) { super(props); this.state = { docList: {} } 之后
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} />
const{downloadedds,docList}=this.state;
渲染:rowData=>
= 0 ? 真:假}
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();
您似乎正在使用刚返回的响应中的ID覆盖下载的EDID。如果我理解正确,您似乎应该将响应中的ID附加到downloaddedds
的现有状态
假设downloadedds
是一个数组,下面是使用
将docList state设置为等于this.state.docList是没有意义的,因为它只会将状态设置为等于相同的内容,所以不需要这样做
希望这有帮助,让我知道,如果我可以进入任何更多的细节
this.setState({
downloadedIds: [
...this.state.downloadedIds,
...response.data.downloadedIds
]
})