当前位置: 首页 > 面试题库 >

在React中使用setState的多个获取请求

秦楚
2023-03-14
问题内容

我正在编写一个组件,该组件将向站点的两个不同路径发出请求,然后将其状态设置为结果响应数据。我的代码如下所示:

export default class TestBeta extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            recentInfo: [],
            allTimeInfo: []
        };
    }

    componentDidMount(){
        Promise.all([
            fetch('https://fcctop100.herokuapp.com/api/fccusers/top/recent'),
            fetch('https://fcctop100.herokuapp.com/api/fccusers/top/alltime')
        ])
        .then(([res1, res2]) => [res1.json(), res2.json()])
        .then(([data1, data2]) => this.setState({
            recentInfo: data1, 
            alltimeInfo: data2
        }));
    }

但是,当我去渲染我的两个状态时,我发现它们实际上仍然是空的,实际上还没有被设置为任何东西。我觉得我可能是错误地使用了Promises或fetch()API,或者误解了setState的工作方式或事物的组合。我进行了测试,发现在第一个then()之后,由于某种原因,我的data1和data2仍然是Promises,并且还没有变成实际的JSON对象。无论哪种方式,我都无法弄清楚我的一生。任何帮助或解释将不胜感激


问题答案:
export default class TestBeta extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            recentInfo: [],
            allTimeInfo: []
        };
    }

    componentDidMount(){
        Promise.all([
            fetch('https://fcctop100.herokuapp.com/api/fccusers/top/recent'),
            fetch('https://fcctop100.herokuapp.com/api/fccusers/top/alltime')
        ])
        .then(([res1, res2]) => Promise.all([res1.json(), res2.json()]))
        .then(([data1, data2]) => this.setState({
            recentInfo: data1, 
            alltimeInfo: data2
        }));
    }

如果您在then处理程序中返回Promise
,则将其解析为值。如果返回其他任何内容(例如您的示例中的Array),则将按原样传递。因此,您需要包装所有的Promise.allPromise类型的Promise类型的承诺



 类似资料:
  • 问题内容: 我想知道如何一次获取多个GET URL,然后将获取的JSON数据放入我的React DOM元素中。 这是我的代码: 但是,我想从服务器中获取其他JSON数据,然后使用传递到其中的所有这些JSON数据呈现我的ReactDOM。例如: 这可能吗?如果不是,将多个JSON数据提取到我的渲染ReactDOM元素中的其他解决方案是什么? 问题答案: 您可以在解决方案之前依靠Promises来执行

  • 本文向大家介绍react多个setState调用的原理是什么?相关面试题,主要包含被问及react多个setState调用的原理是什么?时的应答技巧和注意事项,需要的朋友参考一下 当遇到多个setState调用时,它会提取单次传递给setState的对象,把它们合并在一起形成一个新的单一的对象,并用这个单一的对象去做setState的事情

  • 问题内容: 是否有可能用更新对象的属性? 就像是: 我努力了: 还有这个: 第一个导致语法错误,第二个则什么都不做。有任何想法吗? 问题答案: 有多种方法可以执行此操作,因为状态更新是异步操作,因此要更新状态对象,我们需要使用带有updater函数。 1-最简单的一个: 首先创建的副本,然后执行以下更改: 除了使用,我们还可以这样写: 2-使用 扩展运算符: 注意: 并且仅创建浅表副本,因此,如果

  • 问题内容: 我从输入字段将值作为参数发送给设置状态的函数。我有多个输入字段,因此想使用它们的名称(等于其状态键)来使用相同的函数,并将键和值传递给设置状态的函数。 这是我的代码。 和输入 text参数有效,而key参数无效。 提前致谢。 问题答案: 当与动态密钥设置状态,你需要包装中的关键样

  • 我正在创建 Spring Boot Web 服务,我有一个模范员工 我想创建一个Get请求,它将根据用户给定的参数获取和过滤员工列表。 例如,如果用户提供员工的姓名和员工的指定,则 get 方法应筛选这些结果。对于各种参数组合,它应该可以工作。 为了避免多个if else情况,我根据上面的字符串和整数过滤列表。 我想我在下面的代码中犯了一个错误,该代码在控制器中发送请求。

  • 我正在使用rest服务获取我的react原生android应用程序的响应。每当我使用localhost(我尝试使用127.0.0.1)和端口8080,但fetch给了我[TypeError:Network request failed]。在没有本地主机的情况下,获取请求工作正常。当与邮递员一起使用时,Rest服务可以正常工作。 我正在使用expo运行我的代码。以及使用Maven实现后端依赖性。 我