- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下情况:渲染函数中屏幕上有一个 FlatList:
render() {
console.log('In render');
const { data } = this.state;
console.log(data, 'data');
return (
<View style={styles.container}>
<View style={styles.searchContainer}>
<TextInput
placeholder="Type something!"
onChangeText={text => this.setState({ text })}
value={this.state.text}
/>
<TouchableOpacity
onPress={this.onPressSearch}
>
<View>
<Text>Search</Text>
</View>
</TouchableOpacity>
</View>
<View style={styles.container}>
{data && data.list
? (
<FlatList
data={data.list}
renderItem={({ item }) => (
<View>
<Text style={styles.item}>
{item.name}
, Temp =
{' '}
{item.main.temp}
</Text>
<Text style={styles.item}>{item.weather[0].description}</Text>
<Image
source={{ uri: `http://openweathermap.org/img/wn/${item.weather[0].icon}@2x.png` }}
style={{ width: 100, height: 100 }}
/>
</View>
)
}
/>
)
: null
}
</View>
</View>
);
}
首先,我传递给它这样的 JSON 文件:
{
"message": "accurate",
"cod": "200",
"count": 3,
"list": [
{
"id": 2641549,
"name": "Newtonhill",
"coord": {
"lat": 57.0333,
"lon": -2.15
},
"main": {
"temp": 275.15,
"pressure": 1010,
"humidity": 93,
"temp_min": 275.15,
"temp_max": 275.15
},
"dt": 1521204600,
"wind": {
"speed": 9.3,
"deg": 120,
"gust": 18
},
"sys": {
"country": ""
},
"rain": null,
"snow": null,
"clouds": {
"all": 75
},
"weather": [
{
"id": 311,
"main": "Drizzle",
"description": "rain and drizzle",
"icon": "09d"
}
]
},
{
"id": 2636814,
"name": "Stonehaven",
"coord": {
"lat": 56.9637,
"lon": -2.2118
},
"main": {
"temp": 275.15,
"pressure": 1010,
"humidity": 93,
"temp_min": 275.15,
"temp_max": 275.15
},
"dt": 1521204600,
"wind": {
"speed": 9.3,
"deg": 120,
"gust": 18
},
"sys": {
"country": ""
},
"rain": null,
"snow": null,
"clouds": {
"all": 75
},
"weather": [
{
"id": 311,
"main": "Drizzle",
"description": "rain and drizzle",
"icon": "09d"
}
]
},
{
"id": 2640030,
"name": "Portlethen",
"coord": {
"lat": 57.0547,
"lon": -2.1307
},
"main": {
"temp": 275.15,
"pressure": 1010,
"humidity": 93,
"temp_min": 275.15,
"temp_max": 275.15
},
"dt": 1521204600,
"wind": {
"speed": 9.3,
"deg": 120,
"gust": 18
},
"sys": {
"country": ""
},
"rain": null,
"snow": null,
"clouds": {
"all": 75
},
"weather": [
{
"id": 311,
"main": "Drizzle",
"description": "rain and drizzle",
"icon": "09d"
}
]
}
]
}
它渲染正确。比我使用另一个 JSON:
{
"coord": {
"lon": 27.56,
"lat": 53.9
},
"weather": [
{
"id": 520,
"main": "Rain",
"description": "light intensity shower rain",
"icon": "09d"
}
],
"base": "stations",
"main": {
"temp": 287.15,
"pressure": 1010,
"humidity": 82,
"temp_min": 287.15,
"temp_max": 287.15
},
"visibility": 10000,
"wind": {
"speed": 3,
"deg": 360
},
"clouds": {
"all": 75
},
"dt": 1564730938,
"sys": {
"type": 1,
"id": 8939,
"message": 0.0069,
"country": "BY",
"sunrise": 1564712669,
"sunset": 1564769250
},
"timezone": 10800,
"id": 625144,
"name": "Minsk",
"cod": 200
}
我将此对象设置为 data
变量,该变量保持状态。尝试设置新数据后,FlatList 中的所有信息都将被删除,并且不会显示任何内容。我无法理解,这是怎么回事,因为当我在日志中看到渲染函数最终被新数据调用时,为什么什么也没有发生?
UPD
这是我获取和更新数据的方式:
onPressSearch = async () => {
const cityUrl = `http://api.openweathermap.org/data/2.5/weather?q=${this.state.text}&apikey=8df903ce56f6d18245e72f380beb297d`;
const fetchData = await fetch(cityUrl).then();
const data = await fetchData.json();
this.setState({ data });
Alert.alert(data.name);
};
最佳答案
您获取的数据与原始数据的形状完全不同,并且不包含 list
属性。这意味着当您在 onPressSearch
方法中重新分配时,它将使用新形状进行渲染,该形状不包含 list
,因此您的 FlatList 将不会被渲染。
这个获取的项目应该添加到状态中原始数据中的现有列表
中。您可以执行以下操作:
onPressSearch = async () => {
const cityUrl = `http://api.openweathermap.org/data/2.5/weather?q=${this.state.text}&apikey=8df903ce56f6d18245e72f380beb297d`;
const fetchData = await fetch(cityUrl).then();
const city = await fetchData.json();
const { data } = this.state;
data.list.push(city);
this.setState({ data });
};
关于javascript - Flatlist 在向其传递另一个数据后不会刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57322254/
当我们有大数据时如何优化 Flatlist 的性能。 我的列表既有图片又有文字说明。 我想找到一种方法来提高列表的性能并删除从缓存列表中加载的额外图像,并使列表不重。 最佳答案 FlatList 组件
我在 flatlist 之前有一个 flatlist 元素和另一个元素。当我向上滚动时,flatlist 之前的元素不会上升并且是固定的。有没有办法让它在faltlist向上滚动的时候上升? 例子:
我在一个父级 FlatList 中渲染多个 FlatList 子级 {item.name} HOW DO I
我的列表组件是这样的: ( )} keyExtractor={() => cuid.slug()} ListHeaderComponent={}
我无法创建嵌套在具有相同方向的 FlatList 内的 FlatList; 结果是父级是水平的,而子级是垂直的; 这是我的代码: renderSlides(question) { return
我想显示一个平面列表,但我有一个问题。在手机底部,我无法显示帖子的完整性,也不要滚动到它。我不知道为什么。有些问题?我尝试了一些有风格的间距东西,但这不像我想要的那样工作。 import React,
我有一个垂直的 FlatList 组件和两个按钮作为 TouchableOpacity,我如何使用按钮执行 FlatList 的滚动, 即“将 FlatList 滚动到底部”和“将 FlatList
我有一个垂直的 FlatList 组件和两个按钮作为 TouchableOpacity,我如何使用按钮执行 FlatList 的滚动, 即“将 FlatList 滚动到底部”和“将 FlatList
是否可以使用 实现平面列表? react 原生网络 在保持可见内容的同时在哪里添加数据? 现在,当您添加某些内容时,它会跳到 Flatlist 的顶部。我正在使用 onContentSizeChang
我有这个代码 class Home extends Component { constructor(props) { super(props); this.state = {
我在一个屏幕中有一个静态组件和许多 for 循环渲染组件。 所有代码都在下面。 import React from "react"; import { View, Text, FlatList } f
请帮助我在我的应用程序上实现拉动刷新,我对 native react 有点新,谢谢。我不知道如何处理 onRefresh 和刷新。 class HomeScreen extends Component
我有以下情况:渲染函数中屏幕上有一个 FlatList: render() { console.log('In render'); const { data } = this.
我遇到了 FlatList 问题,我正在尝试使用从数据库获取的数据来渲染图像。但什么也没有出现。我可以从控制台看到数据,正如您在此处看到的: 但是当我尝试访问照片时,它给了我两个错误: 类型错误:无法
我想渲染 FlatList有两个数组 name和photo 。希望我的FlatList每个项目都包含名称和照片。 但我不知道如何将它们合并到我的 FlatList 中数据。 console.log 我
我有一个 FlatList,当状态发生变化时它不会重新渲染。如何让 FlatList 重新渲染? _renderItem = ({item}) => { if(item=='null'){
是否可以将 FlatList 的背景颜色设置为透明? 我有应用程序背景图像并想将其用作屏幕背景。 但是FlatList中的ListItem似乎需要设置一些颜色。同样的问题也适用于标题。 re
如何在 FlatList 中替换颜色? I tried the following example ,但我无法让它工作。 下面是我的代码: _renderItem = ({ item, index }
我正在实现 FlatList,但它没有提供所需的渲染输出。 这是我的代码: App.js import React from 'react'; import Main from './componen
在我的应用程序中,我使用 axios 获取数据。正如我们所知,我们不能将 FlatList 中的数据渲染为一个对象,它必须是一个数组。当我从服务器获取数据时,如果它是单个项目,它就是对象,如果它不止一
我是一名优秀的程序员,十分优秀!