2017-05-02 6 views
4

私は現在、To-doアプリのMobxチュートリアルを採用しています。 link 私がしたいことは、各レンダリングされたリスト項目に単純なカウンタボタンを追加することです。私はこれがかなりシンプルだと考えましたが、文法上の誤りがあります。私が今直面している主なエラーは、「配列またはイテレータ内の各子には、一意の「キー」プロパティが必要です。私は、各カウンタにuuidを追加することでこの問題を解決すると考えました(カウンタが原因でエラーが表示されます)。悲しいかな、私は解決策を見つけられないようです。ここ「ユニークキー」の警告に固執

は、アプリのgithubのリポジトリである:https://github.com/Darthmaul/UmCount

具体this fileが最も変形を受けたものです。カウンターの店舗をそのまま維持するための "counterstore.js"ファイルも追加しました(これは失敗しているようです)。

ご協力いただければ幸いです。この時点で、私は何が間違っていて、何が正しいのか分かりません。

おかげで、

アンドリュー

+0

問題を引き起こしていると思われるコードをリンクするのではなく、質問に直接追加する必要があります。リンクが壊れる可能性があり、SOの回答は同じ問題を経験した人、たとえ数年後でも役に立つものです。また、人々があなたに答えるのが簡単に簡単になります:) –

答えて

5

あなたがより深くで、独自の子供、トップレベルの子供たちだけでなく、それぞれの子ではないだけを持っているかもしれませんそれぞれの子の配列を持っているコンポーネントを、持っていますレベルには独自のキーが必要です。

const Items = ({items}) => (
    <View style={{flex: 1, paddingTop: 10}}> 
    {items.map((item, i) => { 
     return (<View> 
      <Text style={styles.item} key={i}>• {item} - {store.counter}</Text> 
      <Button onPress={() => store.increment()} title="+1" color="#50EB5D" key={uuid()} /> 
      </View> 
     )}) 
    } 
    </View> 
) 

をやっての問題は、あなたのTextButtonコンポーネントは、キーを持っているということですが、あなたのView Sにはありません。

リアクションは調整のためのキーを使用し、コンポーネントのリストが変更されるたびに最小限の変更を検出します。ここでキーを設定すると、配列が変更されたときの調整ポリシーに影響します。、TextおよびButtonは、配列要素ごとに同じキーを持つように設定できます。それぞれが別々に変更された場合は、それぞれに固有のIDを生成する必要があります。

React docs on reconciliation and keys

+0

ありがとうございました、私は全面的に見通しを完全に見落としました。すべてのコンポーネントが鍵を必要としていることに気付かなかった! – Darthmaul