2016-11-02 3 views
1

Я пытаюсь загрузить данные с помощью аксиом, но я не могу извлечь данные в состояние.Асинхронное действие возвращает Array [0]

Мой редуктор:

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

Мои действия Создатель:

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

console.log там действительно дает мне [Объект Object]. Но когда я называю действия он ничего не положить в состоянии 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

Какова ценность 'types.FETCH_QUESTIONS_SUCCESS'? – QoP

ответ

1

Тот факт, что возвращается [Object Object] не проблема ... это строка буквальное представление объекта. Для целей отладки вам может потребоваться вывести его на две строки или объединить с строгим JSON.

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

// or 

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

Предполагая, что данные отклика содержит questions ключ, журнал сразу же после того, как fetchQuestions должен вернуться [], потому что это начальное состояние и API является асинхронной. Таким образом, вы не сможете увидеть состояние в том же самом вызове, который вы вызываете. Возможно, вам понадобится привязать компонент Text к значению JSON.stringify(questions,null,2), чтобы вы могли обеспечить правильное обновление состояния.

+1

Большое спасибо, это было действительно потому, что я сразу же вызвал 'console.log()'. Вместо этого я вызвал функцию fetchQuestions() 'в конструкторе, а затем нажал кнопку console.log(). –