2017-08-01 7 views
0

私は2つのシンプルなフラットリストを持っています。私は各子供がユニークな "キー"小道具を持っている必要がありますが、keyExtractorの両方を定義し、key小道具をカスタムリスト行コンポーネントに追加しようとしたというエラーが表示されます。私。ネイティブフラットリストに反応する - 各子供は「キー」小道具を持っていなければなりません

<FlatList 
    style={_styles.list} 
    data={this.props.divisions} 
    extraData={this.state.chosenDivisionId} 
    keyExtractor={this._keyExtractor} 
    renderItem={this._renderDivisionItem}/>} 
/> 

_keyExtractor = (item, index) => item.id 

_renderDivisionItem = ({ item, index }) => { 
    let typedItem: DivisionData = item; 
    return (
     <ShopListItem 
     text={typedItem.name} 
     selected={this.state.chosenDivisionId === typedItem.id} 
     itemId={typedItem.id} 
     key={typedItem.id} /* Have tried with and without this */ 
     onPress={itemId => this._updateStateForDivisionChosen(itemId)} 
     /> 
    ); 
    }; 

どのように警告が表示されるのですか。間違ったことはありますか? keyExtractorメソッドは他のFlatListsでも正常に動作します。そしてもちろん、使用されるIDは

+1

:-)将来的に誰かを助けることを願って、そのアレイ内のすべてのオブジェクトである場合ではありませんitem.id –

答えて

2

で、この行を変更してみてくださいユニークです。

アプリケーションは状態管理のためにreduxを使用しており、問題のリストは初期状態で初期化されています。モデルはIDのプロパティ名をdivisionIdshopIdから両方のリストのために平文idに変更しましたが、初期状態オブジェクトでこれを変更するのを忘れてしまいました。したがって、データが到着する前にリストがレンダリングされたとき、キー抽出プログラムはdivisionIdまたはshopIdと代わりにid小道具をアイテムで見つけることができませんでした。データが到着すると、状態はオーバーライドされ、キーは正常に設定されます。答えを

おかげで、私はセットアップが正しいよう、私はそれを考えることができる唯一のことは、そのエラーをスローする可能性があり、この失態が

0

が、私は問題を発見し、この

_keyExtractor = (item, index) => typedItem.id 
+0

ありがとう、しかし意味がありません:)渡されたオブジェクトは 'item'と呼ばれ、nullpointerでtypedItemのクラッシュを使用します。インテリセンスのレンダリングに使用されたばかりです – jhm

関連する問題