当前位置: 首页 > 知识库问答 >
问题:

传递axios请求数据后组件未重新挂载

越学义
2023-03-14

当用户单击Sales Overview选项卡时,我想发出axios请求,然后更新该选项卡中的各种图表。我能够发出axios请求,获取数据,甚至获得数据。然而,在第一次点击Sales Overview选项卡时,除了前面的仪表板组件数据(或者前面的任何选项卡),我看不到任何东西。但点击另一个随机选项卡,然后点击Sales Overview选项卡,我就可以看到我想要的数据了。这是一个越来越大的问题吗?

下面是父搜索组件代码:

类搜索扩展组件{state={hcp_id:101,sales_overview_data:[],page_id_sales_overview:4,}

salesOverviewClicked = () => {
    // this.props.salesOverviewDataFromParent(this.state.sales_overview_data);
    console.log('Clicked on sales Overview!');
    let page_id = this.state.page_id_sales_overview;
    let hcp_id = this.state.hcp_id;
    console.log('state: ', this.state);
    axios.post('/test-json', {
        page_id: page_id,
        hcp_id: hcp_id
    })
        .then((res) => {
            const dataRequest = res.data;
            console.log('State before loading data in sales overview: ', this.state);
            console.log('received data inside sales overview', res.data);
            this.setState({ ...this.state, sales_overview_data: res.data });
            console.log('State after loading data in sales overview: ', this.state);
            // this.props.salesOverviewDataFromParent(this.state.sales_overview_data);
        }, (error) => {
            console.log(error);
        });
}


 return(
      <div>
                            <ul class="nav nav-tabs" role="tablist">
                                <li><a class="nav-link active" data-toggle="tab" href="#tablet-1"> <i class="fa fa-th-large"></i>Dashboard</a></li>
                                <li><a class="nav-link " data-toggle="tab" href="#tablet-2" > <i class="fa fa-envelope"></i>Engage with HCP</a></li>
                                <li><a class="nav-link " data-toggle="tab" href="#tablet-3" onClick={this.salesOverviewClicked}> <i class="fa fa-bar-chart-o"></i>Sales Overview</a></li>
                                <li><a class="nav-link " data-toggle="tab" href="#tablet-4"> <i class="fa fa-handshake-o"></i>Promotional Activity</a></li>
                                <li><a class="nav-link " data-toggle="tab" href="#tablet-5"> <i class="fa fa-user-circle"></i>Patient Analysis</a></li>
                            </ul>
                        </div>
    <div class="tab-content">
                            {this.state.receivedData.length !== 0 && <Dashboard data={this.state.receivedData} />}
                            <EngageWithHCP />
                            {this.state.sales_overview_data.length !== 0 && <SalesOverview1 key = {this.state.sales_overview_data} data={this.state.sales_overview_data} />}
                            <PromotionalActivity1 />
                            <PatientAnalysis1 />
                        </div>

下面是SalesOverview1子组件:

 return(
 <div class='row'>
                        {
                            <ChartBox
                                data={this.props.data[401]}
                            />
                        }
   )

除非我首先单击其他选项卡,然后返回到SalesOverview1选项卡,否则不会显示SalesOverview1 comp中的图表(尽管数据是在第一次单击SalesOverview1选项卡时提取的)。

以下是选项卡的基本视图:

我想当我点击选项卡时,由于请求需要时间,数据不会更新,默认情况下我会看到前面的选项卡数据。但一旦获取数据,我就看不到那个选项卡上的数据,因为选项卡组件应该重新挂载,这显然没有发生。怎么做?

共有1个答案

公孙智
2023-03-14

在子组件中添加

componentWillReceiveProps(nextProps){
 // see if nextProps contains updated Data after data being fetched
 // if yes add state in child component and put data from nextprops and use state instead of this.props in render method
}

当数据为空时,您可以在子组件中显示loader,为此从父组件中删除您的检查

 类似资料:
  • 出身背景 我将React Native中内置的应用程序连接到REST API。我通过Axios处理请求,并使用Redux存储查询结果。我有一个api连接的index.js文件,它保存了作为请求处理程序的函数,这些请求需要越来越深的授权级别。我有一个简单的函数返回访问令牌,这是由以下代码触发,当前位于应用程序的“欢迎页面”。 理想情况下,在浏览几个屏幕后,用户将进入主页并触发以下代码: 到目前为止,

  • 问题内容: 我已经按照npm软件包文档中的建议编写了axios POST请求,例如: 它可以工作,但是现在我修改了后端API以接受标头。 内容类型:“ application / json” 授权:“ JWT fefege …” 现在,此请求在Postman上可以正常工作,但是在编写axios调用时,我遵循 此链接 ,无法完全正常工作。 我经常出错。 这是我的修改请求: 任何帮助是极大的赞赏。 问

  • 但是,当我试图通过axios来实现它时,似乎无法通过正确的params数据。我试过了 有人知道如何在Axios中翻译这种类型的数组数据吗?

  • 我是新来的放心,并试图通过以下机构的职位要求。 JSON有效载荷: 我甚至尝试过以下代码: 有人能帮我吗。 谢啦

  • 我正在构建一个VueJS应用程序,并使用JSON web令牌作为身份验证系统。当我登录用户时,我使用localStorage存储令牌,并且工作正常。我检查了标题,它在“授权”参数中。 我通过 我看到了标题,没关系。但是,当我对API中的受保护路由执行get请求时,返回“unauthorized”。但是,当我在请求中手动传递带有令牌的标头时,效果很好。 有人知道如何在执行某个请求时自动传递头吗?

  • 问题内容: 我有一个执行http POST请求的函数。代码在下面指定。这很好。 我为http GET提供了另一个功能,我想将数据发送到该请求。但是我没有那个选择。 的语法是 获取(URL,配置) 问题答案: HTTP GET请求不能包含要发布到服务器的数据。但是,您可以将查询字符串添加到请求中。 angular.http为此提供了一个选项。 请参阅:http : //docs.angularjs.