标签: react-native-flatlist

如何重新渲染平面列表?

与ListView不同,我们可以更新this.state.datasource.是否有任何方法或示例来更新FlatList或重新呈现它?

我的目标是在用户按下按钮时更新文本值...

renderEntries({ item, index }) {
    return(
        <TouchableHighlight onPress={()=> this.setState({value: this.state.data[index].value+1})>
             <Text>{this.state.data[index].value}</Text>
        </TouchableHighlight>
    )
}

<FlatList 
    ref={(ref) => { this.list = ref; }} 
    keyExtractor={(item) => item.entry.entryId} 
    data={this.state.data} 
    renderItem={this.renderEntries.bind(this)} 
    horizontal={false} />
Run Code Online (Sandbox Code Playgroud)

reactjs react-native react-native-flatlist

67
推荐指数
6
解决办法
6万
查看次数

React Native FlatList with columns,Last item width

我正在使用FlatList来显示两列中的项目列表

<FlatList style={{margin:5}}
  data={this.state.items}
  numColumns={2}
  keyExtractor={(item, index) => item.id }
  renderItem={(item) => <Card image={item.item.gallery_image_url} text={item.item.name}/> }
/>
Run Code Online (Sandbox Code Playgroud)

卡组件只是一个具有一些样式的视图:

<View style={{ flex: 1, margin: 5, backgroundColor: '#ddd', height: 130}} ></View>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果项目数是奇数,则最后一行只包含一个项目,该项目会延伸到屏幕的整个宽度.

如何将项目设置为与其他项目相同的宽度?

在此输入图像描述

react-native react-native-flatlist

57
推荐指数
6
解决办法
4万
查看次数

隐藏Android中FlatList(React Native)中的滚动条

我想在我的应用程序中使用FlatList(React-native).我正在水平使用它,可以看到滚动条.ScrollView中有一个选项可以隐藏滚动条但不能隐藏在FlatList中.有没有人能够以其他方式隐藏它.我尝试使用父和子容器的解决方案(隐藏滚动条,但仍然能够滚动),但没有工作.

import React, { Component } from 'react';
import { Text, View, FlatList, StyleSheet, ScrollView } from 'react-native';
import { Card, Button } from 'react-native-elements';

const data = [
    { id: 1, title: 'title 1', details: 'details 1 details 1 details 1' },
    { id: 2, title: 'title 2', details: 'details 2 details 2 details 2 details 2 details 2 details 2' },
    { id: 3, title: 'title 3', details: 'details 3 details 3' },
    { id: 4, …
Run Code Online (Sandbox Code Playgroud)

react-native react-native-flatlist

34
推荐指数
5
解决办法
3万
查看次数

VirtualizedList:您有一个很难更新的大型列表

我使用具有大量项目的FlatList.我收到了来自Expo XDE的警告.

VirtualizedList:你有一个很快更新的大型列表 - 确保你的renderItem函数呈现遵循React性能最佳实践的组件,如PureComponent,shouldComponentUpdate等.{"dt":13861,"prevDt":1498372326027,"contentLength": 6624}

我在FlatList中使用了一些优化方法,例如PureComponent,但我仍然得到这个警告.在我描述我的优化之前,你能否告诉我,即使FlatList被优化,是否仍会出现此警报?或者它可能表明性能的实际问题?我问,因为我的FlatList的表现很好.

reactjs react-native react-native-flatlist

25
推荐指数
6
解决办法
1万
查看次数

任何状态更改时的 FlatList ScrollView 错误 - 不变违规:不支持动态更改 onViewableItemsChanged

当应用程序中的状态发生变化时,onViewableItemsChanged似乎不起作用。这样对吗?

如果是这种情况,似乎它不会很有用....

否则,用户将被迫向我们onScroll确定位置或类似的东西......

重现步骤

  1. 请参考小吃
  2. repo也已经上传到github
  3. 使用时任何状态更改都会产生错误 onViewableItemsChanged
  4. 这个错误甚至意味着什么?

注意:将onViewableItemsChanged函数放在const渲染方法的外部也无济于事...

<FlatList
    data={this.state.cardData}
    horizontal={true}
    pagingEnabled={true}
    showsHorizontalScrollIndicator={false}
    onViewableItemsChanged={(info) =>console.log(info)}
    viewabilityConfig={{viewAreaCoveragePercentThreshold: 50}}
    renderItem={({item}) =>
        <View style={{width: width, borderColor: 'white', borderWidth: 20,}}>
            <Text>Dogs and Cats</Text>
        </View>
    }
/>
Run Code Online (Sandbox Code Playgroud)

实际行为

错误

图片

react-native react-native-flatlist

25
推荐指数
3
解决办法
1万
查看次数

如何在RN平面列表中获取当前可见的索引

我有一个水平的平面列表,其中每个项目是width:300 我想要做的是获取当前可见项目的索引.

<FlatList 
            onScroll={(e) => this.handleScroll(e)} 
            horizontal={true}
            data={this.state.data}
            renderItem...
Run Code Online (Sandbox Code Playgroud)

试过这个:

handleScroll(event) {
    let index = Math.ceil(
      event.nativeEvent.contentOffset.x / 300
    );
Run Code Online (Sandbox Code Playgroud)

这样的事情:

handleScroll(event) {
  let contentOffset = event.nativeEvent.contentOffset;
  let index = Math.floor(contentOffset.x / 300);
Run Code Online (Sandbox Code Playgroud)

但没有什么是准确的我总是得到一个索引或一个索引下来.
我做错了什么以及如何在平面列表中获得正确的当前索引?

例如,我在列表中列出第8项,但我得到索引9或10.
在此输入图像描述

javascript react-native react-native-scrollview react-native-flatlist

20
推荐指数
6
解决办法
1万
查看次数

FlashList 的渲染大小不可用

我正在从 迁移FlatListFlashList,我已将我的 expo sdk 从 升级到 ,45.0.0并且46.0.0在实施FlashListshopify/flashlist 文档中的 as 时,我收到以下警告

FlashList 的渲染大小不可用。高度或宽度太小 (<2px)。请确保列表的父视图具有有效的大小。FlashList 将与父级的大小相匹配。

它工作得很好FlatList,只是从 api 加载数据需要花费很多时间,,,这就是为什么我决定切换到FlashList. 有人知道如何解决这个问题吗?如有任何帮助,我们将不胜感激。这是我的代码

渲染项函数

    const renderItem = ({ item: product }) => {
    return (
      <Product
        category={product.bp_product_category}
        itemname={product.bp_product_name}
        price={product.bp_product_selling_price}
        mass={product.bp_product_mass}
        unitofmass={product.bp_product_unit_of_mass}
        productID={product._id}
      />
    );
    };


      const keyExtractor = useCallback((item) => item._id, []);
      const filteredproducts = products.filter((product, i) =>
      product.bp_product_name.toLowerCase().includes(search.toLowerCase())
       );
Run Code Online (Sandbox Code Playgroud)

FlashList 本身

    <View style={{flex:1, width:'100%', height:'100%'}} >
       <FlashList
          keyExtractor={keyExtractor}
          data={filteredproducts}
          renderItem={renderItem} …
Run Code Online (Sandbox Code Playgroud)

shopify react-native react-native-flatlist

20
推荐指数
2
解决办法
2万
查看次数

React Native - 使用带FlatList的keyExtractor

我一直得到:

"VirtualizedList: missing keys for items, make sure to specify a key property on an item or provide a custom keyExtractor"
Run Code Online (Sandbox Code Playgroud)

非常混乱...,我传递的数组有一个在数组中的每个对象中定义的键属性.我在this.state中定义了该数组.我在控制台中快速打印出来以确定: 打印出阵列

数组中的每个对象定义为:

  var obj = {key: doc.id, value: doc.data()};
Run Code Online (Sandbox Code Playgroud)

(doc和数据来自我的应用程序的另一部分,但我知道doc.id是唯一的)

经过一些谷歌搜索后,我尝试定义一个Key Extractor,如下所示:

_keyExtractor = (item, index) => item.key;
Run Code Online (Sandbox Code Playgroud)

然后这是我的平面列表定义:

  <FlatList
        style={{}}
        data={this.state.FeedDataCollection}
        keyExtractor={this._keyExtractor}
        renderItem={(rowData) =>this.RenderFeedCard(rowData)}
      />
Run Code Online (Sandbox Code Playgroud)

仍然收到相同的错误,此时不确定如何处理这个或它做错了什么.有任何想法吗?非常感谢!

arrays react-native react-native-flatlist

19
推荐指数
2
解决办法
3万
查看次数

React-Native:使用pagingEnabled时在FlatList中获取当前页面

我有一个看起来像这样的FlastList:

<FlatList
     pagingEnabled={true}
     horizontal={true}
     showsHorizontalScrollIndicator={false}
     data={[ {key:"A"}, {key:"B"} ]}
     renderItem={ ({item, index}) => <MyComponent /> }
 />
Run Code Online (Sandbox Code Playgroud)

我有组件的宽度,所以一次只能在屏幕上显示一个页面.如何确定当前页面是什么(或者显示当前组件)?

react-native react-native-flatlist

18
推荐指数
2
解决办法
1万
查看次数

如何使用ReactNative 0.43改善大型列表的FlatList渲染性能?

我正在尝试使用RN0.43中的FlatList渲染3列中约250个图像的列表,并且我更改FlatList的onLayout函数中的图像宽度以适合屏幕的宽度.

初始性能还可以,但是在向上/向下滚动一些之后,有时需要一秒钟或2秒才能显示图像.

如果我改为屏幕方向则更糟糕,更新屏幕需要2~3秒.

一些发现:

  1. 在屏幕旋转之后,直到调用FlatList.onLayout需要一秒或2秒

  2. 在FlatList.onLayout和图像宽度更新之后,每个图像(大约一半的列表,~150个图像;虽然只显示~15个)渲染2~4次,而render()只调用一次.

题:

  1. 如何修改代码以提高性能?
  2. 在多列列表的getItemLayout()中,偏移量应该是(itemHeight + separatorHeight)*(index%numColumns)吗?

谢谢.

测试:GalaxySII(4.1.2)和Android SDK模拟器(7.1.1)

var data = [
    require('./res/img/Search.png'),
    require('./res/img/test - Copy.png'),
    // ~250 items
    ...];

class app extends React.Component {
    renderItem (info, width) {
        console.log('renderItem', info.index);
        if(width !== this.width) {
            this.imageStyle = {width: width-MarginHorizontal , height: width-MarginHorizontal, resizeMode: 'contain'};
        }
        return (
            <Image
                source = {info.item}
                key = {info.index}
                style={this.imageStyle}/>
            );
    }

    render() {
        console.log('Test.render');
        return (
            <View style={{
                flex: 1,
                flexDirection: 'row',
                justifyContent: 'flex-start',
                alignItems: 'center',
                backgroundColor: '#F5FCFF' …
Run Code Online (Sandbox Code Playgroud)

performance react-native react-native-flatlist

18
推荐指数
2
解决办法
4484
查看次数