找不到变量:item React native FlatList
Can't find variable: item React native FlatList
大家好,我的 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:找不到变量:项目
感谢您的帮助:)
由于这一行,您会收到该错误
keyExtractor={item,index => index.toString()}
改为
keyExtractor={(item,index) => index.toString()}
另一件事是您使用 List 的方式不对,并且由于您使用的是 FlatList,因此无需在此处使用 List 而不是使用 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>
希望对您有所帮助!
我认为,您必须检查 API 服务器响应。
在您的代码中,state
中的 posts
正确设置为空数组。
在
之后
const posts = await response.json();
this.setState({posts});
posts
可以不是数组而是其他
先检查一下
在你的 renderItem 方法中,不要在 {} 中传递 item,首先控制台在这里记录你的 item 参数,看看值是多少:
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>
}}
这样你可以从源中提取数据并在平面列表中设置
数据= {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}
/>
大家好,我的 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:找不到变量:项目
感谢您的帮助:)
由于这一行,您会收到该错误
keyExtractor={item,index => index.toString()}
改为
keyExtractor={(item,index) => index.toString()}
另一件事是您使用 List 的方式不对,并且由于您使用的是 FlatList,因此无需在此处使用 List 而不是使用 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>
希望对您有所帮助!
我认为,您必须检查 API 服务器响应。
在您的代码中,state
中的 posts
正确设置为空数组。
在
const posts = await response.json();
this.setState({posts});
posts
可以不是数组而是其他
先检查一下
在你的 renderItem 方法中,不要在 {} 中传递 item,首先控制台在这里记录你的 item 参数,看看值是多少:
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>
}}
这样你可以从源中提取数据并在平面列表中设置
数据= {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}
/>