2016-08-31 8 views
0

Reactを使用して、APIからデータを取得しています。a sample of which can be seen hereReact JS:多次元配列をループし、正しいコンポーネントを決定/ロード

Iはbody部(多次元配列)をループする必要があり、それが 'ブロック' の種類を決定する:

  • テキスト
  • 引用
  • frameImgeBlock
  • を見出し
  • quoteImageBlock
  • frameQuoteBlock

どのブロックタイプに応じて、対応するReactコンポーネントを作成/ロードする必要があります(これらを個々のReactコンポーネントに分離する方が良いと思います)。

React/JSでこれにどのように接近するのが最善でしょうか?

誰かがより簡単なアプローチを提案できる場合は、APIの出力を微調整することができます。

答えて

1

あなたは、外部コンポーネントを呼び出すことになるので、同様に「翻訳」機能を使用することができます。

// Import external deps 

import Heading from './src/heading'; 

// Later in your component code 

function firstKey(obj) { 
    return Object.keys(obj)[0]; 
} 

getDomItem(item) { 
    const key = firstKey(item); 
    const val = item[val]; 
    switch (key) { 
    case "heading": 
     return <Heading heading={ val.heading } ...etc... /> 
    case "other key..." 
     return <OtherElm ...props... /> 
    } 
} 

render() { 
    // data is your object 
    return data.content.body.map(item => 
    this.getDomItem(item[firstKey(item)]) 
); 
} 
+0

ああ、私は参照してください。それは私が後にしたものでしたが、それを表現する方法がわかりません。 :)これは 'Uncaught(promise)型のエラー:' {val.heading} 'の 'undefined'の' property'を読むことができません。 'val'は' undefined'を返します。何か案は? – Ian

+0

まあ、これは、それが箱から出して動作しますから、いくつかのデバッグを必要としません驚い主なアイデアを説明するためだけのドラフトコードではありませんでした:)(私は簡単に見ていたが、私はすぐに間違っているものを参照してくださいいけない) – Pandaiolo

+0

うん私はいくつかの変更を加えましたが、大部分は機能しています。私は本当に 'ブロック'オブジェクトのプロパティをブロックのコンポネントに渡す方法を理解する必要があります。あなたは( '<上記' ...見出しのためのような)現在の項目から関連する小道具を呼び出すことによって、手動でそれを行う、またはでき – Ian