Не могу найти переменную: item Реагирует на родной FlatList - PullRequest
0 голосов
/ 22 апреля 2020

Привет всем, у меня проблема с моим FlatList, вот код:

Я не знаю, откуда возникла проблема

import React, { Component } from 'react'
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";

import {View, Text, FlatList} from 'react-native';
import {
    Avatar,
    Button,
    Card,
    Title,
    Paragraph,
    List,
    Headline,
  } from 'react-native-paper';


export default class Home extends React.Component{
    constructor(props) {
        super(props);
        this.state = {
          posts: []
        };
    }
    componentDidMount() {
        this.fetchLastestPost();
      }

  async fetchLastestPost() {
    const response = await fetch(
      'https://kriss.io/wp-json/wp/v2/posts?per_page=5'
    );
    const posts = await response.json();
    this.setState({posts});
  }

render() {

    return (
        <List>
        <Headline style={{ marginLeft: 30 }}>Lastest Post</Headline>
        <FlatList
          data={this.state.posts}
          renderItem={({ item }) => (
              <Card
                style={{
                  shadowOffset: { width: 5, height: 5 },
                  width: '90%',
                  borderRadius: 12,
                  alignSelf: 'center',
                  marginBottom: 10,
                }}>
                <Card.Content>
                  <Title>{item.title.rendered}</Title>
                </Card.Content>
                <Card.Cover
                  source={{ uri: item.jetpack_featured_media_url }}
                />
              </Card>
          )}
          keyExtractor={item,index => index.toString()}
        />
    </List>
    )

}

}

Моя цель - отображать сообщения из WordPress блог на мою домашнюю страницу в компоненте карты, но я продолжаю получать эту ошибку: ReferenceError: Не могу найти переменную: item

Спасибо за вашу помощь:)

Ответы [ 4 ]

1 голос
/ 22 апреля 2020

Вы получаете эту ошибку из-за этой строки

keyExtractor={item,index => index.toString()}

измените ее на

keyExtractor={(item,index) => index.toString()}

И другая вещь, вы используете Список неправильно, и так же, как вы используете FlatList не нужно использовать Список здесь вместо списка использовать View.

 <View>
    <Headline style={{ marginLeft: 30 }}>Lastest Post</Headline>
    <FlatList
      data={this.state.posts}
      renderItem={({ item }) => (
          <Card
            style={{
              shadowOffset: { width: 5, height: 5 },
              width: '90%',
              borderRadius: 12,
              alignSelf: 'center',
              marginBottom: 10,
            }}>
            <Card.Content>
              <Title>{item.title.rendered}</Title>
            </Card.Content>
            <Card.Cover
              source={{ uri: item.jetpack_featured_media_url }}
            />
          </Card>
      )}
      keyExtractor={(item,index) => index.toString()}
    />
</View>

enter image description here

Надеюсь, это поможет!

0 голосов
/ 22 апреля 2020

таким образом Вы можете извлекать данные из источника и устанавливать в плоском списке

data = {this.state.GridListItems}

           renderItem={({item}) =>

           <TouchableOpacity
          onPress={this.getListViewItem.bind(this, item)}
          style={{flexDirection: 'row',marginTop:10}}
        >

              <Image source={{ uri: item.icon}} style = {{height:65,width:65,marginStart:20,padding:10,alignSelf:"center",borderRadius:5}} />
               <Text style={styles.item}  >{item.key}</Text> 

                     </TouchableOpacity>
                        }  

           ItemSeparatorComponent={this.renderSeparator}  

       /> 
0 голосов
/ 22 апреля 2020

в вашем методе renderItem, не передавайте элемент в {}, сначала запишите здесь параметр вашего элемента, посмотрите, каково значение:

renderItem={(item ) => {
console.log({item})
             return <Card
                style={{
                  shadowOffset: { width: 5, height: 5 },
                  width: '90%',
                  borderRadius: 12,
                  alignSelf: 'center',
                  marginBottom: 10,
                }}>
                <Card.Content>
                  <Title>{item.title.rendered}</Title>
                </Card.Content>
                <Card.Cover
                  source={{ uri: item.jetpack_featured_media_url }}
                />
              </Card>
          }}
0 голосов
/ 22 апреля 2020

Я думаю, вам нужно проверить ответ вашего API-сервера.


В вашем коде posts в state правильно задан пустой массив.
после

 const posts = await response.json();
    this.setState({posts});

posts может быть не массивом, а другим.

Сначала проверьте

...