gpt4 book ai didi

javascript - React - Redux 在渲染组件之前等待获取结果

转载 作者:行者123 更新时间:2023-12-03 00:07:14 26 4
gpt4 key购买 nike

我有一些react-redux项目。我有一些组件,我不想列出 api 中的一些数据。只是我从 componentDidMount 方法内部的组件分派(dispatch)操作,该方法获取数据。

当我刷新页面时,我将 console.log 设置为我的 redux 状态。

组件渲染良好,但是当我查看控制台时,我的 console.log 显示我的状态为空,然后正常显示我的状态。在这个进度时间内,我的组件给我错误,我不想显示我的数据页面未定义。

所以这是因为我理解 fetch 方法是异步工作的,但是当我的 redux 状态将从 api 获取数据然后渲染组件时需要做什么?

这是我的操作:

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'
})
})
}
}

这是我的 reducer :

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
}
}

在我的组件中:

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)

最佳答案

选项1

使用前检查 reducer 状态

选项2

 async componentDidMount(){
//set loader true
await this.props.getData;
//set loader false
}

关于javascript - React - Redux 在渲染组件之前等待获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54908698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com