react-native - 在 React Native 中,Flatlist 循环遍历嵌套数组
问题描述
我正在尝试遍历我的 React 本机应用程序中的嵌套数组。
我尝试使用 for 循环,但没有奏效。我还是 React 的新手,所以我不太熟悉如何循环
现在我要做的是只显示数组newRow
中每个对象中的数据row
使用{ item.newRow[0].name }
确实有效我想循环newRow
显示所有新行
如何遍历所有行并newRows
显示所有行?
示例数组:
{
id: 0,
text: 'View',
newRow: [
{id: 0, text: 'View'},
{id: 1, text: 'Text'},
{id: 2, text: 'Image'},
{id: 3, text: 'ScrollView'},
{id: 4, text: 'ListView'},
]
},
{id: 1, text: 'Text',
newRow: [
{id: 0, text: 'View'},
{id: 1, text: 'Text'},
{id: 2, text: 'Image'},
{id: 3, text: 'ScrollView'},
{id: 4, text: 'ListView'},
]
},
{id: 2, text: 'Image'},
{id: 3, text: 'ScrollView'},
{id: 4, text: 'ListView'},
示例代码:
import React, { Component } from 'react';
import { FlatList, Text, StyleSheet,View } from 'react-native';
const rows = [
{
id: 0,
text: 'View',
newRow: [
{id: 0, text: 'View'},
{id: 1, text: 'Text'},
{id: 2, text: 'Image'},
{id: 3, text: 'ScrollView'},
{id: 4, text: 'ListView'},
]
},
{id: 1, text: 'Text',
newRow: [
{id: 0, text: 'View'},
{id: 1, text: 'Text'},
{id: 2, text: 'Image'},
{id: 3, text: 'ScrollView'},
{id: 4, text: 'ListView'},
]
},
{id: 2, text: 'Image'},
{id: 3, text: 'ScrollView'},
{id: 4, text: 'ListView'},
]
// const rowsNewRow = rows[i].newRow
const extractKey = ({newRow}) => newRow
export default class App extends Component {
renderItem = ({item}) => {
return (
<Text style={styles.row}>
{item.text}
</Text>
)
}
renderLoop = ({item}) => {
var items= [];
for(let i = 0; i < item; i++){
items.push(
<View key = {i}>
<View>
<Text style={styles.row}>
{item.text}
</Text>
</View>
<View>
</View>
<View>
</View>
</View>
)
}
}
render(
) {
return (
<View style={styles.container}>
<FlatList
style={styles.container}
data={rows}
renderItem={this.renderItem}
keyExtractor={extractKey}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
marginTop: 20,
flex: 1,
},
row: {
padding: 15,
marginBottom: 5,
backgroundColor: 'skyblue',
},
})
解决方案
听起来您正在考虑将 newRow 数组中的项目包含在您在 FlatList 中创建的行中。
这可以通过将您的renderItem
功能更新为这样的方式来实现
renderItem = ({item}) => {
let items = [];
if( item.newRow) {
items = item.newRow.map(row => {
return <Text>{row.text}</Text>
})
}
return (
<View>
<Text style={styles.row}>
{item.text}
</Text>
{items}
</View>
)
}
我正在做的是
- 创建一个空数组来保存映射
newRow
项 - 检查
newRow
数组是否存在 - 如果它存在,那么我将它映射到一个数组
- 更新 return 函数,使其返回所有项目
这是带有工作代码的小吃https://snack.expo.io/@andypandy/flatlist-with-nested-array
推荐阅读
- python - Keras LSTM 范式
- django - Django 1.11 Json 模型
- java - 如何在java上生成随机唯一数
- php - 使用带或不带值的 array_flip
- swift - UITapGestureRecognizer:模态视图被另一个视图重叠
- javascript - 如何在 es6 中编写更好的代码来格式化具有数组值的对象
- javascript - 为什么在我的 Babel 预设中添加“es-2015”会导致此基本应用程序中的“未定义导出”?
- javascript - 用 CSS 改变 div 的位置
- mysql - MYSQL:在 FUNCTION 中验证特定格式的输入值
- google-cloud-platform - 将文件传输到 jupyter 目录中的 google 计算引擎实例