2017-08-09 3 views
0

Reduxを使用してアクションからデータを取得し、取得したJSONオブジェクトのプロパティをコンポーネント内に表示しようとしています。しかし、私はインターネットの周りに見たすべての手順を実行した後も、私のコンポーネントでconsole.log(this.props)を実行するとまだ空の配列が得られます。この空の配列は、使用されるたびに項目を追加し、毎回配列に「未定義」項目を追加しているようです。Reduxを使用してデータを渡すと、this.propsはまだ空の配列

まあ、私のaction.js

import 'whatwg-fetch'; 


export const FETCH_RECIPES = 'FETCH_RECIPES'; 
const ROOT_URL = 'http://myapi/recipe/id/'; 

export function fetchRecipes(id) { 
    const url = ROOT_URL + id; 
    return (dispatch) => { 
    fetch(url) 
     .then((response) => response.json()) 
     .then((request) => dispatch(fetchRecipesSuccess(request))) 
    }; 
} 

export function fetchRecipesSuccess(request) { 
    return { 
     type: FETCH_RECIPES, 
     request 
    }; 
} 

と私は私の中にアクションをインポートするよ減速、reducer_recipes.js

import { FETCH_RECIPES } from "../actions/index"; 

export function recipes (state = [], action) { 
    switch(action.type) { 
     case FETCH_RECIPES: 
      return [action.request.data, ...state]; 
     default: 
      return state; 
    } 
} 

マイCREATESTORE: const createStoreWithMiddleware = createStore(rootReducer, applyMiddleware(thunk));

Aaaaand最後に、私のコンポーネントの関連するコードスニペット:

componentDidMount() { 
    this.props.fetchData(1); 
} 

render() { 
    return (
     <h1>{console.log(this.props)}</h1> 
)} 


function mapStateToProps(state) { 
return { recipes: state.recipes }; 
} 

const mapDispatchToProps = (dispatch) => { 
    return { 
     fetchData: (id) => dispatch(fetchRecipes(id)) 
    }; 
}; 

export default connect(mapStateToProps, mapDispatchToProps)(Recipe); 

ここで、this.propsへの接続を削除しますか?これで何時間も頭を叩いた。

答えて

0

レシピ

function mapStateToProps(state) { 
    return { recipes: state.recipes }; 
} 
、私はAPIリクエストで返されたデータを見ることができなかったが、私はあなたの状態がアクセスしているとき、あなたは配列のプロパティを持つオブジェクトとしてアクセスしている

の下に一つのことに気づきました

しかし、あなたはおそらく、あなたが

を試みることができる[]、

import { FETCH_RECIPES } from "../actions/index"; 

export function recipes (state = [], action) { 
    switch(action.type) { 
     case FETCH_RECIPES: 
      return [action.request.data, ...state]; 
     default: 
      return state; 
    } 
} 

で配列を返すされています

return {...state, action.request.data}; 

または回答のため

return {...state, recipes: action.request.data}; 
+0

おかげで、それは助けにはならなかったのいずれか:(自分の行動をチェックインすると、通過して、データをつかんフェッチが、私はそれを落としなってき推測しています私の減速機またはコンポーネントのいずれかにあります。これ以上のアイデアは? – hejhej123

+0

「action.request.data」で検索されるものを私に見せてもらえますか?機密扱いの場合は、データをマスクしてください。 –

+0

私はついにフェッチを取得しました。私のレデューサーで '.data'を使わずに' action.request'を使用すると、データが表示されます。私はまだ問題を抱えていますが、フォローアップの質問があります。 私のコンポーネントでは、 'console.log(this.props.recipes)'ならすべてのレシピの配列を取得します。私が 'console.log(this.props.recipes [0]')を実行すると、Description、Name、Idのような異なる値を持つこれらのオブジェクトの1つが得られます。 [0] .Name' - 以前のconsole.logから値があることがわかっていても、Nameは未定義です。 – hejhej123

関連する問題