2017-04-18 4 views
0

Myコンポーネントには配列として定義されたプロパティがありますが、数字キーで値を反復できません。キーは文字列であるようです。 何か不足していますか?React PropTypes.arrayには文字列型のキーがあります

class Test extends React.Component { 
    render() { 
     let parse = []; 
      for (let i in Object.keys(this.props.test)) { 
       parse.push(
        <div key={i}> 
         {i} {typeof i} {this.props.test[i]} 
        </div> 
       ) 
    } 
    return (
     <div> 
      {parse} 
     </div> 
    ) 
    } 
} 

Test.propTypes = { 
    test: React.PropTypes.array 
} 

ReactDOM.render(
    <Test test={["a", "b", "c"]} />, 
    document.getElementById('main') 
); 

プロパティテストのキーが文字列であることを示します。

this.props.test.map((el, i) => (
    <div key={i}> 
    {i} {typeof i} {el} 
    </div> 
)) 

非を使用して:あなたのケースで

Codepen Example

+0

JavaScriptオブジェクトのキーは常に文字列であるため – CodinCat

+0

あなたは '書く場合でも{1:「FOO」} '、' 1 'は、文字列 – CodinCat

+0

になりますが、私はとプロパティを定義し["a"、 "b"、 "c"]。 また、PropTypeも配列に設定されています。 –

答えて

0

、あなただけのmapforEachまたはクラシックfori < lengthループを使用し、数字キーを反復処理したい場合は、ここにmap例です数字キーは全く問題ありません。さらに、インデックスをキーとして使用することは良い考えではありません。例えば

あなたの配列をソートを変更または削除/始めや途中に要素を挿入し、反応することができる場合には、多くの不必要な操作を行うことができます(のアンマウント/再マウントして)

0

方が良いマップを呼び出すコードを整理することができますお使いのアレイ上の機能、

class Test extends React.Component { 
    render() { 
    const {test} = this.props; 

    return (
     <div> 
     {test.map((t, i) => 
      <div key = {i}>{i} {typeof i} {t}</div> 
     )} 
     </div> 
    ); 
    } 
} 

Test.propTypes = { 
    test: React.PropTypes.array 
}; 

ReactDOM.render(
    <Test test={["a", "b", "c"]} />, 
    document.getElementById('main') 
); 
+0

'Object.keys'はここでは必須ではありません。すでに文字列の配列です。' this.props.test'のマップを直接使用できます:) –

+0

はい、ありがとうございます。 –

関連する問題