Не удается управлять массивами состояний - PullRequest
0 голосов
/ 26 июня 2019

Я хочу получить данные JSON из API, но я не знаю размер этих данных. данные как история "состоит из имени и изображения". есть ошибка с именем переменной и аватаром.

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import MenuButton from '../components/MenuButton';
import User from '../components/User';
import API from '../Utils/API';

export default class SettingScreen extends React.Component {
  constructor(props){
    super(props);
    this.state={
      name: [],
      avatar:[]
    };
  }
  render() {
    var userCard=[];
    for(let i=0; i<3; i++){
      userCard.push(
        <View>
        <User name={this.state.name[i]} avatar={this.state.avatar[i]}/>
      </View>
        )}

    return (
      <View style={styles.container}>
      <MenuButton navigation={this.props.navigation}/>
        {userCard}
      </View>
    );
  }

async componentDidMount() {
// Load async data.
  let userData = await API.get('/', {
      params: {
        results: 1,
        inc: 'name,avatar'
      }
    }); 

    // Parse the results for ease of use.
    for(let i=0; i<userData.length; i++){
      const Data = userData.data[i];
      const names = Data.name;
      const base64Icon=Data.image;
      const base64Icons=base64Icon.slice(2,-1);
      const avatar = 'data:image/jpg;base64,'+base64Icons;
          this.setState(state=>{
         const name=state.name.push(names);
        return{
          name,
          avatar,
        }
      });
    }
  }
  }


const styles = StyleSheet.create({
    container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
  text: {
    fontSize: 30,
   }
 });

Когда я пытаюсь запустить приложение, появляется предупреждение: предупреждение: у каждого ребенка в списке должна быть уникальная «ключевая» опора.

1 Ответ

0 голосов
/ 26 июня 2019

В функции рендеринга, в которой вы выполняете цикл for, добавьте ключевую опору в каждое представление:

 for(let i=0; i<3; i++){
      userCard.push(
        <View key={i}>
        <User name={this.state.name[i]} avatar={this.state.avatar[i]}/>
      </View>
        )}

Вам необходимо ввести в ключ уникальное значение.Если у вас есть идентификатор для этой карты пользователя, используйте его вместо i

...