Вывести значения массива объектов в формате таблицы в ReactNative

Я новичок в React Native. Моя цель - отобразить этот массив объектов в табличном формате в React Native. Я использую DataTable из React-Native-Paper.

var accounts=[
        {
            "accNumber": "56456454",
            "accType": "D",
            "productCode": "1454541",
            "availBalance": "987436.46",
          },
        {
            "accNumber": "12424345645",
            "accType": "D",
            "productCode": "154545641",
            "availBalance": "500397.64",
          },
        {
            "accNumber": "4554545664",
            "accType": "D",
            "productCode": "44545",
            "availBalance": "2467.02",
          }
    ]

Я пробовал это, но все равно он показывает ошибку:

 <DataTable>
   <DataTable.Header>
      <DataTable.Title >
          <Text style={styles.text}>Account</Text>
      </DataTable.Title>
      <DataTable.Title >
          <Text style={styles.text}>Code</Text>
      </DataTable.Title>
      <DataTable.Title >
           <Text style={styles.text}>Available Balance</Text> 
      </DataTable.Title>
   </DataTable.Header>
  {
   accounts.map(account=>{
     return(
        <DataTable.Row>
           <DataTable.Cell>{account.accNumber}</DataTable.Cell>
           <DataTable.Cell>{account.productCode}</DataTable.Cell>
           <DataTable.Cell>{account.availBalance}</DataTable.Cell>
        </DataTable.Row>
      )
   })}
 </DataTable>

Пожалуйста, предложите способ отображения данных учетных записей в табличном формате, поддерживаемом React Native. Есть ли другой способ сопоставить данные в табличном формате, кроме DataTable?

Expected Result:

Account                Code         Available Balance
56456454               1454541      987436.46
12424345645            154545641    500397.64
4554545664             44545        2467.02

2 ответа

Трудно точно понять, что это не так, не увидев сообщения об ошибке, но я смог адаптировать ваш код, чтобы заставить работать DataTable с оригинальной бумагой для работы.

Ниже приведен рабочий пример. Вы также можете запустить его самостоятельно в этой закуске.

import * as React from 'react';
import { Text, View, StyleSheet } from 'react-native';
import Constants from 'expo-constants';
import { DataTable } from 'react-native-paper';

export default App = () => {
  var accounts = [
    {
      accNumber: '56456454',
      accType: 'D',
      productCode: '1454541',
      availBalance: '987436.46',
    },
    {
      accNumber: '12424345645',
      accType: 'D',
      productCode: '154545641',
      availBalance: '500397.64',
    },
    {
      accNumber: '4554545664',
      accType: 'D',
      productCode: '44545',
      availBalance: '2467.02',
    },
  ];

  return (
    <View style={styles.container}>
      <DataTable>
        <DataTable.Header>
          <DataTable.Title>Account</DataTable.Title>
          <DataTable.Title>Code</DataTable.Title>
          <DataTable.Title>
            Balance Available
          </DataTable.Title>
        </DataTable.Header>
        {
          accounts.map(account => {
          return (
            <DataTable.Row
              key={account.accNumber} // you need a unique key per item
              onPress={() => {
                // added to illustrate how you can make the row take the onPress event and do something
                console.log(`selected account ${account.accNumber}`)
              }}
            >
              <DataTable.Cell>
                {account.accNumber}
              </DataTable.Cell>
              <DataTable.Cell style={styles.messageColumn}>
                {account.productCode}
              </DataTable.Cell>
              <DataTable.Cell numeric>
                {account.availBalance}
              </DataTable.Cell>
            </DataTable.Row>
        )})}
      </DataTable>
    </View>
  );
}


const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
    padding: 8,
  },
});

Да, есть и другие способы сопоставления данных в react native с помощью FlatList и т. Д.

Замените этот раздел своего кода:

{
   accounts.map(account=>{
     return(
        <DataTable.Row>
           <DataTable.Cell>{account.accNumber}</DataTable.Cell>
           <DataTable.Cell>{account.productCode}</DataTable.Cell>
           <DataTable.Cell>{account.availBalance}</DataTable.Cell>
        </DataTable.Row>
      )
   })}
 </DataTab

с этим:

   { accounts.map((account, key)=>(
        <DataTable.Row>
            <DataTable.Cell>{account.accNumber}</DataTable.Cell>
            <DataTable.Cell>{account.productCode}</DataTable.Cell>
            <DataTable.Cell>{account.availBalance}</DataTable.Cell>
        </DataTable.Row>
        )
    )}

Вам следует избавиться от предупреждения.

Я также работаю над проектом, в котором мне нужно сгенерировать табличное представление из JSON. Я использую FlatList React-Native. Вот пример моего кода

  <View style={{flex: 1}}>
    <View style={[tableStyle.tableWrapper]}>
      <ScrollView horizontal={true} showsHorizontalScrollIndicator={true}>
        <FlatList
          data={[renderList]}
          renderItem={this.renderTableBody}
          keyExtractor={(item, index) => index.toString()}
        />
      </ScrollView>
    </View>
  </View> 

вам нужно передать renderList(массив, сгенерированный из вашего файла JSON) и отобразить эти значения в renderItem.

Другие вопросы по тегам