2016-10-19 11 views
0

メニューを作成する必要があります。メニューは、get要求で受け取ったオブジェクトによって定義されます(すべてがアプリケーションのバックエンドを通して動的に実行されます)。get要求によるレデューサーの作成

オブジェクトは、次のような形式があります:私がやりたい何

[ 
    { 
     id: "Option1", 
     subtopics:[ 
      { 
       id: "Option 1-1", 
       subtopics: [ 
        { 
         title: "Option 1-1-1" 
        }, 
        { 
         title: "Option 1-1-2" 
        } 
       ] 
      }, 
      { 
       id: "Option 1-2", 
       subtopics: [ 
        { 
         title: "Option 1-2-1" 
        }, 
        { 
         title: "Option 1-2-2" 
        } 
       ] 
      }, 
     ] 
    }, 

    { 
     id: "Option2", 
     subtopics:[ 
      { 
       id: "Option 2-1", 
       subtopics: [ 
        { 
         title: "Option 2-1-1" 
        }, 
        { 
         title: "Option 2-1-2" 
        } 
       ] 
      }, 
      { 
       id: "Option 2-2", 
       subtopics: [ 
        { 
         title: "Option 2-2-1" 
        } 
       ] 
      }, 
     ] 
    } 
] 

をのみオプション1およびオプション2に表示してメニューを表示することです。オプション1をクリックすると、すべてのサブトピックが表示され、サブトピックをクリックすると、すべてのサブトピックが表示されます。 (これはツリーメニューの形式で)

これについてかなり考えた後、私はこれを行う唯一の方法はReduxを使うことだと感じています。しかし、私は本当にここからどこに行くか分からない。

それが今であるので、私はセットアップに減速におけるこのオブジェクトのGETリクエストを試してみましたが、私は次のエラーを取得しています:ここで

Error: Reducer "topic" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined.

は私の減速のための現在のコードです:

export default function(){ 
    const request = axios.get(theUrl) 
     .then(function(response){ 
      return response.data; //the entire object array 
     }) 
} 

実際に呼び出されているURLが有効であることを覚えておいて、私はアプリの他の部分でそれをテストしました。

質問に追加すると思いますが、私はこれを正しい方法で行っていますか?そうでない場合、どのように私は動的にこのメニューを生成し、それぞれのメイントピックをクリックして 'メニューツリー'を作ることができますか?

ありがとうございます! API呼び出しが完了取得するとき

+0

_「これを行う唯一の方法はReduxを使用することです」_ほとんど決してありません。 Reduxは、調整する複雑なアクションがたくさんあるときに役立ちますが、このような単純なアクションでは 'setState'よりも優れていません。 – joews

+1

そして私はあなたがレデューサーを誤解していると思います。レデューサーは、アプリの現在の状態とアクションを取り、新しい状態を返す_pure関数_です(AJAXはありません)。あなたはそれを直接呼び出すことはありません。あなたはアクションをディスパッチし、Reduxはあなたのために減速機を呼び出します。 – joews

+0

@joewsおっと!そして、私はこれについてどうやってやっているのか、明らかに間違っていました。しかし、減速家ではない場合、どのように世界でこのメニューツリーをコンポーネントと一緒に作ることができますか? – theJuls

答えて

0

APIコールはその後componentWillMount時に、コンポーネントでは、減速機と減速に初期状態に空白のオブジェクトを使用する

を結果を渡し、アクションに置かれるべきである小道具が空のメニューが含まれている場合、アクションを開始オブジェクト

関連する問題