У меня есть какой-то реактивный проект.У меня есть компонент, который я не хочу перечислять некоторые данные из API.я просто отправляю действие из моего компонента в метод componentDidMount , который извлекает данные.
Когда я обновляю страницу, я делаю console.log своим состоянием редукции.
Компонент хорошо рендерится, но когда я смотрю на консоль, мой console.log показывает мое состояние пустым, затем показывает мое состояние нормально.. В это время выполнения мой компонент дает мне ошибку, что мои данные, которые я не хочу показывать на странице, не определены.
Так вот, потому что метод извлечения работает асинхронно, насколько я понимаю, но что нужно сделать, когда мое состояние избыточности будет получать данные из 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'
})
})
}
}
вот мое редуктор:
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)