2016-11-02 2 views
1

zurück Ich versuche, Daten mit Axios zu laden, aber ich kann die Daten nicht in den Status abrufen.Async-Aktion gibt Array [0]

Mein Minderer:

import * as types from '../actions/actionTypes'; 

const initialState = { 
    fetching: false, 
    fetched: false, 
    questions: [], 
    error: null, 
} 

export default function reducer(state = initialState, action = {}) { 
    switch (action.type) { 
    case types.FETCH_QUESTIONS_SUCCESS: 
     return { 
     ...state, 
     questions: action.payload 
     }; 
    case types.FETCH_QUESTIONS_FAILURE: 
     return { 
     ...state, 
     error: action.payload 
     }; 
    default: 
     return state; 
    } 
} 

Meine Aktion Schöpfer:

import * as types from './actionTypes'; 
import axios from 'axios'; 

export function fetchQuestions(city) { 
    return function (dispatch) { 
    axios.get('http://rest.learncode.academy/api/test123/tweets') 
     .then((response) => { 
     console.log("Test:" + response.data) //This returns [Object Object] 
     dispatch({type: "FETCH_QUESTIONS_SUCCESS", payload: response.data}) 
     }) 
     .catch((err) => { 
     dispatch({type: "FETCH_QUESTIONS_FAILURE", payload: err}) 
     }) 
    } 
}; 

Die console.log dort tut mir geben [Object]. Aber wenn ich die Aktion rufen nicht setzen es nichts in dem Zustand questions

const {questions, actions} = this.props; 
const openQuestionOverview = (test) => { 
    actions.fetchQuestions(); 
    console.log(questions); //Returns Array[0] for questions 
} 

return(
    <TouchableHighlight onPress={openQuestionOverview}> 
       <Image source={button} /> 
    </TouchableHighlight> 
) 
+0

Was ist der Wert von 'types.FETCH_QUESTIONS_SUCCESS'? – QoP

Antwort

1

Die Tatsache, es [Object Object] Rückkehr ist kein Problem ... das ist die Stringliteral Darstellung des Objekts. Zu Debuggingzwecken möchten Sie es möglicherweise in zwei Zeilen abmelden oder mit stringed JSON verketten.

console.log('Test') 
console.log(response.data) 

// or 

console.log('Test: ' + JSON.stringify(response.data)) 

die Antwortdaten Angenommen enthält einen questions Schlüssel, das Protokoll unmittelbar nach fetchQuestions[] zurückkehren sollte, weil das der Anfangszustand ist, und die API ist Async. Sie werden also nicht in der Lage sein, den Status zu sehen, in dem Sie die Aktion aufrufen. Sie möchten möglicherweise eine Komponente an den Wert JSON.stringify(questions,null,2) binden, damit Sie sicherstellen können, dass der Status ordnungsgemäß aktualisiert wird.

+1

Vielen Dank, es war in der Tat, weil ich die 'console.log()' direkt danach aufgerufen habe. Stattdessen habe ich die 'fetchQuestions()' Funktion im Konstruktor aufgerufen und dann console.log() beim Drücken der Taste aufgerufen. –