标签: react-native-flatlist

如何在 React Native FlatList (2018) 中向右滚动到列

我正在寻找一种在这样的表格上滚动视口的方法,除了每个单元格的大小完全相同: 视口可以向上、向右、向左、向下滚动

我目前正在使用FlatList'snumColumns参数来制作表格并在该表格上滚动视口。

这是一个小吃示例 - RegularGridExample

import React from 'react';
import { FlatList, Text, View } from 'react-native';

const numRows = 10,
  numColumns = 10,
  width = 100,
  height = 100,
  cells = [...Array(numRows * numColumns)].map((_, cellIndex) => {
    const rowIndex = Math.floor(cellIndex / numRows),
      colIndex = cellIndex % numColumns;
    return {
      key: `${colIndex},${rowIndex}`,
      rowIndex,
      colIndex,
      styles: {
        width,
        height,
        backgroundColor: 'green',
        borderColor: 'black',
        borderWidth: 1,
      },
    };
  });

export default class RegularGridExample extends React.Component { …
Run Code Online (Sandbox Code Playgroud)

react-native react-native-flatlist

5
推荐指数
1
解决办法
2413
查看次数

flatlist 将来自 json api 的数据渲染为每行 3 个项目

大家好,我正在从 json api 获取数据,我正在使用 flatlist 来呈现项目。我正在使用numColumns属性每行显示 3 个项目,但假设我有 7 或 8 个项目,但在渲染时遇到问题。我想显示的布局是这样的

X X X
X X X
X X
Run Code Online (Sandbox Code Playgroud)

但我得到的是: 布局

这是我的代码:

    _renderItem = ({ item, index }) => (
            <View style={categorystyles.Category} key={index}>
                <TouchableOpacity activeOpacity={.5}
                    onPress={() => this.props.navigation.navigate('ListingPerCategory', { catid: item.id })}>
                    {item.category_app_icon ? <Image style={categorystyles.CategoryImg}
                        source={{ uri: `${item.category_app_icon}` }} /> :
                        <Image style={categorystyles.CategoryImg}
                            source={require('../assets/coffeecup.png')} />}
                </TouchableOpacity>
                <Text style={{ marginTop: 5 }}>{escape(item.name).replace('%20', ' ').replace('%26amp%3B%20', ' ')}</Text>
            </View>
        )
   render(){
     return(
        <FlatList
        horizontal={false}
        data={this.state.categories}
        keyExtractor={(item, index) => item.id} …
Run Code Online (Sandbox Code Playgroud)

react-native react-native-flatlist

5
推荐指数
1
解决办法
1609
查看次数

[react-native]有没有办法知道flatList的渲染什么时候完成

我有一个 flatList 视图,我希望它在数据更新时滚动到结束或滚动到索引(从服务器获取数据),我在 comoponentDidUpdate 中执行但它不起作用。现在当渲染完成时,listView 总是滚动到顶部而且我看不到最新加载的数据。所以有没有办法在渲染完成时捕获事件。

代码:

...
fetchData(){
    fetch(url)
    .then((res)=>{
        this.setData({data:[...this.state.data, res.data]})
    })
}
componentDidUpdate(){
    this.refs.listView.scrollToEnd({animated:true})
}
render(){
    return <FlatList ref='listView' data={this.state.data} onEndReached={()=>this.fetchData()}.../>
}
Run Code Online (Sandbox Code Playgroud)

android react-native react-native-flatlist

5
推荐指数
0
解决办法
1435
查看次数

FlatList 中标题和正文的分隔符样式

目前,我在使用 FlatList 时遇到了问题。我有一个组件来呈现列表簿。按照设计,header 的宽度是屏幕的宽度,body 将左右填充 10px。

所以我使用了contentContainerStyle={{paddingHorizontal: 10}}. 但是结果是header和body都是10px左右填充。

请提出解决方法。对不起,我的英语不好!!

更新:我很抱歉没有彻底描述我的问题。

main.tsx

...
public render() {
  return (
    <FlatList
      key...
      data={..}
      renderItem={this.renderItems}
      ListHeaderComponent={this.renderHeader}
      contentContainerStyle={styles.contentStyle}
    />
  );
}

private renderHeader = () => {
  return (
    <View style={style.header}
      //TODO something ...
    </View>
  );
}

private renderItems: ListRenderItem<IBook> = ({ item: {bookId} }) => bookId ?
  (
    <BookGridCell
      title={...}
      image={...}
      //TODO more..
    />
  ) : <View style={styles.emptyBox} /> 
}
Run Code Online (Sandbox Code Playgroud)

renderItems,我调用了一个组件BookGridCell。在这个组件中,设置了书籍的设计。所以如果我直接在里面添加样式renderItems,每本书的左右边距都是10px,而不是整个正文。

contentContainerStyle 与 …

react-native react-native-flatlist

5
推荐指数
1
解决办法
1774
查看次数

RN 水平拉动刷新

我有一个水平滚动的 React-Native FlatList,我通过将“horizo​​ntal” prop 设置为 true 来实现它,它工作得很好,但现在我想添加 pull 来刷新,但我无法让它工作。

我添加了“refresing”和“onRefresh”道具,它们可以正常工作。唯一的问题是 FlatList 实现了垂直下拉刷新,这在水平滚动时非常奇怪。在 Android 和 iOS 中,您必须从顶部下拉才能开始刷新,但这没有意义,因为当您位于列表末尾时,您想从左侧拉。在 iOS 上,情况也更糟,因为 FlatList 的整个内部现在也可以垂直移动。

是否有任何设置可以尝试使其正常工作,或者我可以通过任何方式手动实现水平拉动以刷新?

pull-to-refresh react-native react-native-flatlist

5
推荐指数
0
解决办法
507
查看次数

React-Native:在 FlatList 中反转 zIndex

我有一个带有一些元素的 FlatList,其中顶部元素应该与底部元素重叠。为此,我想反转 zIndex,但 FlatList 不断覆盖我的 zIndex。

在下面的代码中,我试图用 zIndex 反转,zIndex: 0 - index但它不起作用

import React, { Component } from "react";
import { FlatList, Text, View, StyleSheet } from "react-native";

export default class App extends React.Component {
  _renderPost({ index }) {
    return <View style={[styles.item, { zIndex: 0 - index, }]} />;
  }
  render() {
    return <FlatList data={[1, 2, 3, 4, 5,]} renderItem={this._renderPost} />;
  }
}

const styles = StyleSheet.create({
  item: { 
    height: 200, 
    borderWidth:2, 
    borderBottomLeftRadius:50, 
    borderBottomRightRadius:50, 
    marginBottom: -50, 
    backgroundColor:"white",
  }, …
Run Code Online (Sandbox Code Playgroud)

android z-index ios react-native react-native-flatlist

5
推荐指数
1
解决办法
1965
查看次数

当它后面没有任何东西时,无法滚动绝对定位的 FlatList

我正在尝试做的事情:

制作一个搜索栏并将结果显示在栏下方的平面列表中。

我拥有的:

我有一个 SearchBar 和一个 FlatList,FlatList 需要但在绝对位置,所以它覆盖了搜索栏底部的内容

问题:

当 FlatList 处于活动状态时,它会覆盖搜索栏,我无法滚动列表或选择一个项目。我注意到,如果我在单击 SearchBar 应该出现的位置时尝试选择一个项目或滚动列表,我可以选择并滚动列表。

我需要的:

要在 SearchBar 下显示并能够滚动它的 FlatList。我可以用来top: 50在 SearchBar 下显示 FlatList 但它看起来并不好

观察:我不太擅长风格

import React, { Component } from 'react'
import { Text, View, StyleSheet, TouchableHighlight, FlatList } from 'react-native'
import {
    Slider,
    SearchBar,
    ListItem,
} from 'react-native-elements'

export default class SearchForm extends Component {

    state = {
        pages: 1,
        displayList: false,
        itemsPerPage: 5,
    }

    componentDidMount = async () => {
        const {
            data = …
Run Code Online (Sandbox Code Playgroud)

stylesheet react-native react-native-flatlist

5
推荐指数
1
解决办法
988
查看次数

到达顶部时加载更多

正如我们可以在 when 使用 load more 功能onEndReached一样,同样的,当我们到达列表顶部时我们如何使用 load more ?同样在执行此操作时,当我在顶部加载更多数据时,平面列表移动到最顶部元素,因此滚动变得无限。

谢谢。

react-native react-native-flatlist

5
推荐指数
2
解决办法
3514
查看次数

FlatList 未使用 React Hooks 和 Realm 更新

我正在编写一个自定义钩子以将它与realm-js一起使用。

export default function useRealmResultsHook<T>(query, args): Array<T> {
  const [data, setData] = useState([]);

  useEffect(
    () => {
      function handleChange(newData: Array<T>) {
        // This does not update FlatList, but setData([...newData]) does
        setData(newData);
      }

      const dataQuery = args ? query(...args) : query();
      dataQuery.addListener(handleChange);
      return () => {
        dataQuery.removeAllListeners();
      };
    },
    // eslint-disable-next-line react-hooks/exhaustive-deps
    [query, ...args]
  );

  return data;
}
Run Code Online (Sandbox Code Playgroud)

在我的组件中:

const MyComponent = (props: Props) => {
  const data = useRealmResultsHook(getDataByType, [props.type]);

  return (
    <View>
      <Text>{data.length}</Text>
      <FlatList
        data={data}
        keyExtractor={keyExtractor}
        renderItem={renderItem} …
Run Code Online (Sandbox Code Playgroud)

reactjs react-native react-native-flatlist react-hooks

5
推荐指数
1
解决办法
2840
查看次数

可拖动的平面列表不渲染任何东西

我正在尝试为draggable-flatlist 编写一个简单的代码。同样的代码对于 FlatList 运行得非常好。在下面的代码中,如果我用 DraggableFlatList 替换 FlatList,虽然从呈现的组件“TaskListTile”显示日志,但我没有在屏幕上看到任何内容

  this.state = {
    data: [{key: '0',id:'0', name: 'Tasklist1', totalTasks: '10', completedTasks: '9'},
    {key: '1',id:'1', name: 'Tasklist2', totalTasks: '12', completedTasks: '9'},
    {key: '2',id:'2', name: 'Tasklist3', totalTasks: '50', completedTasks: '1'}
  ]

  }
}


render(){
  return (

    <FlatList
      data={this.state.data}
      renderItem= {({item}) =><TaskListTile displayData={item}/>}
      keyExtractor={item => item.id}
      scrollPercent={5}
      onMoveEnd={({ data }) => this.setState({ data })}
    /> 
  )
};
Run Code Online (Sandbox Code Playgroud)

任务列表Tile.js

    const {id, name, completedTasks, totalTasks} = this.props.displayData;

    return (
        <View key={id} style={{backgroundColor:'#d6eef8', borderColor:'#00CCFF', borderWidth:1,margin:10,padding:10, borderRadius:5}}>
            <Text style={{color:'#00CCFF', fontSize:20}}>{name}</Text> …
Run Code Online (Sandbox Code Playgroud)

react-native react-native-flatlist react-native-draggable-flatlist

5
推荐指数
0
解决办法
498
查看次数