Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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 从setState回调返回_Javascript_Reactjs - Fatal编程技术网

Javascript 从setState回调返回

Javascript 从setState回调返回,javascript,reactjs,Javascript,Reactjs,我有一个父组件,我使用refs调用子组件中的函数 子组件函数具有this.setState和this.setState中的回调函数 handleSaveProject = async () => { this.setState({ //set some state }, () => { if(this.state.isValid){ let project = this.initi

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

子组件函数具有
this.setState
this.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
也不会返回任何内容

你需要做一些类似于这里答案的事情:

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);
            });
          }
     }
   );
)};