javascript - 从 setState 回调返回

标签 javascript reactjs

我有一个父组件,我在其中使用 refs 调用子组件中的函数。

子组件函数有一个 this.setStatethis.setState 内的回调函数。

handleSaveProject = async () => {
    this.setState({
            //set some state
        }, () => {
            if(this.state.isValid){
                let project = this.initializeProject();
                return ProjectAPI.saveProject(project).then((response) => {
                    console.log(response); //ok
                    return response;
                });
            }
        }
    );
}

这很好用。现在,我从父组件中使用引用进行调用。

 handleSaveClick = () => {
        if(createProjectComponentRef.current){
            createProjectComponentRef.current.handleSaveProject().then((saveResponse) => {
                console.log(saveResponse); //undefined
                if(saveResponse && saveResponse.status === 200){
                    this.handleDialog();
                    ProjectAPI.getProjects().then((response) => {
                        this.setState({projects: response})
                    });
                }
            });
        }
    }

我可以调用子组件函数,但在父组件中得到的响应(返回值)未定义。请问有什么帮助吗?

最佳答案

handleSaveProject 实际上不会返回任何内容,而且我认为 setState 也不会返回任何内容。

您需要执行类似此处答案的操作:React setState callback return value

return new Promise(resolve => {
   this.setState({
        //set some state
    }, () => {
        if(this.state.isValid){
            let project = this.initializeProject();
            return ProjectAPI.saveProject(project).then((response) => {
                console.log(response); //ok
                resolve(response);
            });
          }
     }
   );
)};

关于javascript - 从 setState 回调返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57164979/

相关文章:

php - 抓取 Soundcloud 图像

reactjs - 使用babel从node_modules导入模块但失败

javascript - 为什么这两个版本的高阶函数没有给出相同的结果?

javascript - Knockout 中的模态对话框

javascript - 如何仅从内部修改指令范围属性

javascript - Kendo Grid 中锁定和解锁列的高度不匹配

angular - 如何让 Observable 返回转换后的项目数组(Rxjs)

reactjs - 如何将状态对象表示为 typescript 接口(interface)

javascript - 如何使用 React 修改 JSON 文件?

javascript - 使用 ng-repeat 中的 ng-model 以 AngularJS 形式提交数据