Во-первых, вам нужно убедиться, что если ваш метод renderItem
использует функцию жирной стрелки с фигурными скобками, как в вашем примере, вам нужно добавить оператор return , например, так:
renderItem={({item}) => { return <PickerBox title={item.c_syn_name} /> }}
Если вы не используете фигурные скобки, вы можете определить функцию следующим образом:
renderItem={({item}) => <PickerBox title={item.c_syn_name} />}
Во-вторых, убедитесь, что данные представляют собой массив , а не объект .Согласно описанию данных FlatList prop в оригинальной документации:
Для простоты данные представляют собой простой массив.Если вы хотите использовать что-то еще, например, неизменяемый список, используйте непосредственно базовый VirtualizedList.
Из вашего вопроса кажется, что вы хотите перебрать массив объектов, подобный этому:
[
{
"c_node_name_scientific": "Centurio",
"c_syn_name": "wrinkle-faced bat",
"i_node_id": 27644
},
{
"c_node_name_scientific": "xxx",
"c_syn_name": "xxx",
"i_node_id": 123
},
//...
]
Если это так, просто оберните объект состояния dataSource
в массив, как показано выше.
Если вы хотите передать данные как объект, подобныйна это:
{
key1: {title: 'Title 1'},
key2: {title: 'Title 2'}
key3: {title: 'Title 3'}
}
вам нужно сделать что-то вроде следующего, чтобы сделать данные доступными для FlatList:
<FlatList
data={Object.keys(this.state.dataSource)} // will result in ["key1", "key2", "key3"]
renderItem={({item}) =>
// here `item` will be the Object's key. eg: "key1"
<PickerBox title={this.state.dataSource[item].title} />
}
/>
И, наконец, если Flatlist необходимо обновить как Stateобновления, вы должны добавить в prop extraData={this.state}
в FlatList.В соответствии с FlatList Documentation :
Передав extraData = {this.state} в FlatList, мы гарантируем, что FlatList будет заново визуализироваться при изменении state.selected.Без установки этого реквизита FlatList не знал бы, что ему необходимо повторно визуализировать какие-либо элементы, потому что он также является PureComponent, и сравнение реквизитов не покажет никаких изменений.