reactjs - 尝试生成动态表格内容时出错:对象作为 React 子项无效
问题描述
我对 React Native 很陌生,有一件事对我不起作用,我希望它起作用。也许有人可以告诉我我错在哪里或建议正确的方法。
我有一些可以表示为表格的数据。具有任意数量/名称的列。所以我想在应用程序中绘制一个动态表格。
数据示例如下所示:
{
"columns": ["column1", "column2"],
"results": [
{"column1": "test", "column2": "passed"},
{"column1": "second test", "column2": "passed as well"}
]
}
因此,我想绘制一张表格(例如 via DataTable from react-native-paper
,尽管它可以是任何其他类型的表格),例如:
<DataTable>
<DataTable.Header>
<DataTable.Title>column1</DataTable.Title>
<DataTable.Title>column2</DataTable.Title>
</DataTable.Header>
<DataTable.Row>
<DataTable.Cell>test</DataTable.Cell>
<DataTable.Cell>passed</DataTable.Cell>
</DataTable.Row>
<DataTable.Row>
<DataTable.Cell>second test</DataTable.Cell>
<DataTable.Cell>passed as well</DataTable.Cell>
</DataTable.Row>
</DataTable>
所以我现在正在做的是:(代码被简化以说明问题)
const drawTable = (data) => {
const result = JSON.parse(data)
let content = `<DataTable><DataTable.Header>`
result.columns.forEach(function(element, idx, array) {
content += `<DataTable.Title>${element}</DataTable.Title>`
})
content += `</DataTable.Header>`
result.results.forEach(function (element, idx, array) {
content += `<DataTable.Row>`
result.columns.forEach(function (column, idx, array) {
content += `<DataTable.Cell>${element[column]}</DataTable.Cell>`
})
content += `</DataTable.Row>`
})
content += `</DataTable>`
return (
{content}
)
}
const HomeScreen = (props) => {
const [data, setData] = React.useState(null)
<View>
{drawTable(data)} //here the data is already a valid JSON with format as mentioned above
</View>
}
我得到的是以下错误:
Objects are not valid as a React child (found: object with keys {content}). If you meant to render a collection of children, use an array instead.
所以基本上我想从动态构建的字符串中生成一个组件。这样做的正确方法是什么?
谢谢!
解决方案
试试这个,避免使用 idx 作为键,我只用于实际目的。
import * as React from 'react';
import { Text, View, StyleSheet, SafeAreaView } from 'react-native';
import Constants from 'expo-constants';
// You can import from local files
import AssetExample from './components/AssetExample';
// or any pure javascript modules available in npm
import { Card, DataTable } from 'react-native-paper';
export default function App() {
const data = {
columns: ['column1', 'column2'],
results: [
{ column1: 'test', column2: 'passed' },
{ column1: 'second test', column2: 'passed as well' },
],
};
const { columns, results } = data;
return (
<SafeAreaView style={styles.container}>
<DataTable>
<DataTable.Header>
{columns.map((column, idx) => (
<DataTable.Title key={column}>{column}</DataTable.Title>
))}
</DataTable.Header>
{results.map((result, idx) => (
<DataTable.Row key={idx}>
{columns.map((element) => (
<DataTable.Cell>{result[element]}</DataTable.Cell>
))
}
</DataTable.Row>
))}
</DataTable>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#ecf0f1',
paddingTop: 50,
},
});
这是一个小吃:https ://snack.expo.dev/MnkVd6B1e ,您可以使用 expo 运行它
推荐阅读
- javascript - 如何创建默认在新窗口中打开的浏览器书签?
- ios - 在 Xcode 10 中添加自定义 UITableViewController 标头
- javascript - Wordpress:将所有帖子的子子类别设为“主要”
- c++ - 尝试加载 dll 时总是收到 126 LoadLibrary 错误
- python - 将多个 Excel 文件导入多个 pd.Series
- masstransit - 为什么要为事件接口层次结构中的每个级别创建订阅?
- python - 如何在 Python 中使用正则表达式替换字符串
- javascript - 如何在树枝内切换类(如果条件)
- python - 将从 views.py 传递的变量添加到模板中的静态文件中
- python - utils 库中 Django 的 phone2numeric 方法的目的是什么?