Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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-setState内部获取的更好解决方案_Javascript_Reactjs - Fatal编程技术网

Javascript Reactjs-setState内部获取的更好解决方案

Javascript Reactjs-setState内部获取的更好解决方案,javascript,reactjs,Javascript,Reactjs,这个问题基本上解决了,但有点过时了 我试图在提取完成后设置状态。不幸的是,将fetch放入ComponentDidMount()的基本解决方案没有按我所希望的那样工作(它表明状态未定义),因此我找到了如下解决方案:声明全局变量,将获取的数据分配给此全局变量,然后放入then()dothis.setState()。这是可行的,但我觉得这不是一个完全正确的解决方案 是否有更好/更干净的方法在内部获取设置状态? 下面是我的代码片段: var fetchedData=null; 类主扩展组件{ 状态={

这个问题基本上解决了,但有点过时了

我试图在提取完成后设置状态。不幸的是,将fetch放入
ComponentDidMount()
的基本解决方案没有按我所希望的那样工作(它表明状态未定义),因此我找到了如下解决方案:声明全局变量,将获取的数据分配给此全局变量,然后放入
then()
do
this.setState()
。这是可行的,但我觉得这不是一个完全正确的解决方案

是否有更好/更干净的方法在内部获取设置状态?

下面是我的代码片段:

var fetchedData=null;
类主扩展组件{
状态={
数据:“,
};
componentDidMount(){
获取(“某个url”{
证书:“包括”,
})。然后((res)=>{
res.json()
。然后((数据)=>{
fetchedData=数据;
})
.然后(()=>{
if(fetchedData.someData){
this.setState({data:fetchedData.someData});
}
});
});
}
//代码的其余部分
}
试试这个

类主扩展组件{
状态={
数据:“,
};
异步组件didmount(){
let res=wait-fetch(“一些url”,{credentials:“include”});
让data=wait res.json();
if(data.someData){
this.setState({data:data.someData});
} 
});
}
//代码的其余部分

}
在这里使用全局变量毫无意义。为什么不在
json()
回调中使用
setState
?我不知道如何实现这个回调。你能展示一下它的样子吗?不幸的是它不起作用。这是我的基本解决方案,但在某些情况下,它表明状态是未定义的。
class Main extends Component {
    constructor(props) {
        super(props); 
        this.state = {
            data: ''
        }
    }

    componentDidMount() {
        fetch("some-url", {
            credentials: "include",
        }).then((res) => res.json())
          .then(data => this.setState({data}));
    }
    //rest of code
}