react项目同一界面不同组件间的请求方法执行顺序问题

react项目同一界面不同组件间的请求方法执行顺序问题

最近碰到一个有点棘手的问题;layout中包含头部组件header组件,路由组件,路由组件中包含了首页等其他页面组件,页面组件用的都是类组件;
比较复杂的登陆功能放在了头部组件执行,由于头部组件需要展示登陆状态和用户名称等信息;而首页几个图表的数据接口需要在登陆成功之后才能请求成功;否则会提示error“用户未登陆或登陆超时”’,获取不到接口的数据;请求方法都放在了compoentDidMount中执行;出现的问题就是项目第一次打开首页无法渲染出图表数据,第二次之后打开后正常有数据;通过控制台log出是由于第一次是执行首页请求数据时,登陆接口未请求完成,后端接口判断为未登陆状态;
所以必须要先等登陆完成之后再执行别的数据请求;如果在一个组件的话处理简单;不同的组件不是很好处理这种方法顺序问题;
解决方法:EventEmitter公交车来控制请求方法的执行顺序;等header组件中login请求成功后emit出当前登录状态;在homePage组件compoentDidMount中接收,接收到之后再执行请求即可;
新建一个eventbus.js文件,在需要通信的不同组件之后引入;
//eventbus.js
import {EventEmitter} from 'events';
export default new EventEmitter();
//header.js
 await http.post('/api/common/login/ystLogin', request).then((res) => {
                    if (res.code == StatusCode.RFESA04) {
                        isLogin = false;//只拦截无登录权限的
                    }
                    else {
                        users.removeMyPersonalInfo();
                    }
                    eventbus.emit('isLogin',isLogin);
                })
//homePage.js
 componentDidMount() {
        eventbus.on('isLogin', (msg) => {
            console.log('接收的值', msg);
            if (msg) {
                this.getAbTrxNumData();
                this.initChartsData();
            }
        })
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React组件执行子组件方法一般需要通过 props 来实现,具体步骤如下: 1. 在父组件中定义一个函数,该函数将会被子组件调用。 2. 在父组件中将该函数通过 props 传递给子组件。 3. 在子组件中通过 props 获取父组件传递的函数,并且在需要执行时调用该函数即可。 下面是一个简单的示例: ``` // 父组件 import React, { Component } from 'react'; import ChildComponent from './ChildComponent'; class ParentComponent extends Component { constructor(props) { super(props); this.state = { message: '' }; this.updateMessage = this.updateMessage.bind(this); } updateMessage(message) { this.setState({ message }); } render() { return ( <div> <ChildComponent updateMessage={this.updateMessage} /> <p>Message from child component: {this.state.message}</p> </div> ); } } // 子组件 import React, { Component } from 'react'; class ChildComponent extends Component { constructor(props) { super(props); this.handleClick = this.handleClick.bind(this); } handleClick() { this.props.updateMessage('Hello from child component!'); } render() { return ( <button onClick={this.handleClick}>Click me</button> ); } } ``` 在上述示例中,父组件 `ParentComponent` 定义了一个 `updateMessage` 函数,该函数将会被子组件调用。同时,`ParentComponent` 将该函数通过 `props` 传递给子组件 `ChildComponent`。在子组件中,当按钮被点击时,会调用父组件传递的 `updateMessage` 函数,并将消息作为参数传递给该函数。父组件中的 `message` 状态会被更新,并且该消息会被渲染在页面上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值