首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在呈现组件之前等待获取结果

在呈现组件之前等待获取结果
EN

Stack Overflow用户
提问于 2019-02-27 15:16:20
回答 1查看 8.1K关注 0票数 0

我有一些反应-还原计划。我有一些组件,我不想列出api中的一些数据。简单地说,我从componentDidMount方法内部的组件中分派操作,该方法获取数据。

当我刷新页面时,我会使console.log成为我的redux状态。

组件呈现良好,但是当我查看控制台时,我的console.log显示我的状态为空,然后正常显示我的状态。在这个过程中,我的组件给了我错误,我不想在页面上显示的数据是未定义的。

所以这里是因为fetch方法是异步工作的--我是如何理解的,但是当我的redux状态从api获得数据时,组件将被呈现,那么需要做什么呢?

以下是我的操作:

代码语言:javascript
复制
export const FETCH_DATA_START = 'FETCH_DATA_START'
export const FETCH_DATA_SUCCESS = 'FETCH_DATA_SUCCESS'
export const FETCH_DATA_FAILED = 'FETCH_DATA_FAILED'

export const getData = () => {
    return (dispatch) => {
        dispatch({
            type: FETCH_DATA_START
        })
        fetch("http://api.com", {
                credentials: "include",
                method: "POST",
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json'
                }
            })
            .then(res => res.json())
            .then((res) => {
                dispatch({
                    type: FETCH_DATA_SUCCESS,
                    payload: res
                })
            })
            .catch((err) => {
                console.log(err)
                dispatch({
                    type: FETCH_DATA_FAILED,
                    payload: 'error'
                })
            })
    }
}

这是我的减速器:

代码语言:javascript
复制
import { FETCH_DATA_START, FETCH_DATA_SUCCESS, FETCH_DATA_FAILED } from 'store/actions/getData'

let initialState = []

export default (state = initialState, action) => {
    switch (action.type) {
        case FETCH_DATA_START:
            return [...state]
        case FETCH_DATA_SUCCESS:
            return [...state, ...action.payload]    
        case FETCH_DATA_FAILED: 
            return [state]
        default:
            return state
    }
}

在我的组件中:

代码语言:javascript
复制
import React, {Component} from 'react'
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux'
import {getData} from 'store/actions/getData'


class Ops extends Component {

    componentDidMount() {
        this.props.getData()
    }
    render() {
       console.log(this.props.dataOps)
       return(
           <div></div>
         )
    }
}


const mapStateToProps = state => ({dataOps: state.dataOps})

function mapDispatchToProps(dispatch) {
    return {
        getData: bindActionCreators(getData, dispatch)
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(Ops)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-27 15:30:01

备选案文1

使用前检查减速机的状态

选项2

代码语言:javascript
复制
 async componentDidMount(){
   //set loader true
   await this.props.getData;
   //set loader false
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54908698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档