получить нулевой и фактический результат при получении API в реакции - PullRequest
0 голосов
/ 16 апреля 2019

Я попытался отреагировать на получение api от typicode.com, но каким-то образом он возвращает 2 набора реквизитов. Один ноль, а другой фактические данные.

Я попытался удалить начальное состояние в редукторе. Я переместил вызовы из ловушки жизненного цикла componentDidMount в componentWillMount ().

Я использую промежуточное программное обеспечение Redux Thunk.

Это редукторы:

const initialState =[{}]

const postReducer = (state=initialState , action) =>{


    switch(action.type){

        case "FETCH_POST":
            return { ...state, forumPosts:action.payload};

        default:
            return state;

    }
}

export default postReducer;

это действия:

import axios from 'axios';


export const fetchPosts = ()=>dispatch =>{
        axios.get(`https://jsonplaceholder.typicode.com/posts`)
        .then(res =>(
        dispatch({type: "FETCH_POST", payload:res.data }) 
    )
    )
    .catch(err => dispatch({type: "FETCH_POST", payload : {}}))


}

это основные приложения:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import { connect } from 'react-redux';
import  {fetchPosts} from './actions/postActions'


class App extends Component {
  componentWillMount(){
    this.props.fetchPosts();    
  }
  render() {
     const {forumPosts } = this.props;
     console.log(forumPosts)

    return (


      <div className="App">

      </div>
    )

  }
}

const mapStateToProps = (state) =>{
  return{
    forumPosts : state.forumPosts 
  }
};



export default connect(mapStateToProps, {fetchPosts})(App);

вот магазин:

const store = createStore(postReducer, applyMiddleware(thunk));

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

Ожидаемый результат - список фиктивных сообщений из типичного кода, но сначала он возвращает ноль, а затем фактические фиктивные данные.

1 Ответ

0 голосов
/ 16 апреля 2019

Я думаю, что вы делаете ошибку в редукторе, поскольку я вижу, что вы ожидаете массив объекта как posts и вы используете оператор распространения с объектом вместо массива, попробуйте это, это решит вашу проблему,

const initialState = [{}];

const forumPosts = (state = initialState , action) => {


    switch(action.type) {

        case "FETCH_POST":
            return  [ ...state, ...action.payload ]; // merging 2 arrays using spread oprator

        default:
            return state;

    }
}

export default forumPosts;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...