Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用现有状态更新/重置状态-ReactJs_Javascript_Reactjs_Axios_State - Fatal编程技术网

Javascript 使用现有状态更新/重置状态-ReactJs

Javascript 使用现有状态更新/重置状态-ReactJs,javascript,reactjs,axios,state,Javascript,Reactjs,Axios,State,我在这里有点头疼。我有一些复选框。选中复选框后,您可以根据选中的复选框下载文档。下载完成后,我禁用了复选框,但它仍然标记为选中。UI方面,我通知用户此部分已下载。但是,如果用户从同一页面中选择另一个复选框,则上一个复选框将再次启用(因此不再禁用)。我的问题是如何更新或重置我的状态,以便禁用所有复选框,并仅下载当前选定的文档,而不是以前的文档 constructor(props) { super(props); this.state = { docList: {} } 之后

我在这里有点头疼。我有一些复选框。选中复选框后,您可以根据选中的复选框下载文档。下载完成后,我禁用了复选框,但它仍然标记为选中。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} />
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
    ]
})