有没有更好的方法来处理来自异步调用的响应,而不是执行setState

时间:2019-06-17 08:59:26

标签: javascript reactjs

我正在使用javascript async等待服务器(主要是从componentDidMount或componentDidUpdate)对服务器进行服务调用,但是当我想将响应作为道具发送给其他组件时,我目前正在使用响应更新组件的状态。但是由于作为用户我实际上并未修改该特定状态,因此它有点像浪费的变量。有什么办法可以将它作为道具添加到我的组件中,而不是设置状态。

class Example extends React.Component {
    constructor(props){
        super(props);
        this.state = {data: {}}
    }
    componentDidMount(){
        const {data} = await getService();
        this.setState({data})
    }
    render(){
       return (<ChildComponent data/>)
    }
}

是否有可能从响应中获取作为属性的数据作为道具,而不是将其设置为状态并从状态中检索

2 个答案:

答案 0 :(得分:0)

假设您的示例是实际应用的按比例缩小版本,那么我想说您在做什么。否则,我会有一个小的查询,询问为什么他们不使用ChildComponent来获取数据以避免“道具钻探”,即,将道具穿过多层组件传递,最终到达关心数据的组件。

答案 1 :(得分:0)

在状态componentDidMount中进行异步调用是不合适的,因为只要状态改变,componentDidMount就会被调用==>对该服务的调用很多。

使用Redux(包含应用程序状态的状态管理工具),通过执​​行@async(在此使您所有的呼叫服务并自动连接到其他组件而无需传递它),是一种更优雅的方法道具)