2017-07-06 8 views
0

アレイは方法以下生成される無限ループを開始する。React/ES6のアソシエイティブアレイのマッピング方法は?

for(var i = start; i <= end;i+=step) { 
    arr[i] = i + 'is the number'; 
} 

アレイ構造はそうでこの

arr = [ 
1100: "1100 is the number", 
1101: "1101 is the number", 
1102: "1102 is the number", 
1103: "1103 is the number", 
1104: "1104 is the number", 
1105: "1105 is the number", 
]; 

とのように見えます。

この配列は、Reactのリスト要素にマップされます。

render() { 
    const list = this.arr; 
    const timeList = list.map((element) => 
     <li>{element}</li> 
     ); 


    return (
     <div className="App" > 
     {timeList} 
     </div> 
    ); 

普通の配列ではうまくいきますが、これを使うと無限ループになります。

なぜこれが起こっており、これを解決する可能性はありますか? は、「。あなたが名前のインデックスを使用している場合は、JavaScriptが標準オブジェクトに配列を再定義します をその後、いくつかの配列のメソッドとプロパティが正しくない結果を生む」 ことが判明:

はあなた

UPDATEありがとう

しかし、問題

+0

あなたの配列構造は有効なJavaScriptコードではありません。 * "名前付きインデックスを使用すると、JavaScriptは配列を標準オブジェクトに再定義します。" *それは間違っています。すべての配列はオブジェクトです。ただし、配列のすべてのプロパティが配列の要素とみなされるわけではありません。したがって、使用する予定のない方法で配列を使用することが非常にうまくいく可能性があります。しかし、あなたが持っているコードは無限ループにはなりません。完全な例がなければ、手助けするのは難しいです。 –

答えて

0

にまだ解決策私はあなたのレンダリング関数内ARR変数を持っていると仮定しています。あなたの問題は 'this.arr'です。ここから 'this'を削除し、 'arr'を使用してください。

render() { 
    const arr = [ 
     1100: "1100 is the number", 
     1101: "1101 is the number", 
     1102: "1102 is the number", 
     1103: "1103 is the number", 
     1104: "1104 is the number", 
     1105: "1105 is the number", 
    ]; 
    const list = arr; 
    const timeList = list.map((element, idx) => 
     <li key={idx}>{element}</li> 
     ); 


    return (
     <div className="App" > 
     {timeList} 
     </div> 
    ); 
} 
+0

素敵な試みですが、まだ無限ループです。 – Giedrius

+0

@Giedriusそれは私の最後に正しく動作しています。ここでは単純なgithub repoを使って試してみてください。 Github repo:https://github.com/upasanaa/react-array-infinite-loop-issue – Upasana

0

は私< =終了されることがあります。ここでは

は、作業コードは、私はそれは配列を印刷し、私の地元の反応セットアップ時にチェックしているのですか?長さなどを試してみましたか?

別の解決策はmap()関数に切り替えてみてください。

お知らせください。

+0

回答を使用して明確化質問をしないでください。 –

関連する問題