Answers:
如果有人仍在寻找有关@Ponleu和@David Schilling在此处描述的问题的建议(关于FlatList上方的内容),那么这就是我采取的方法:
<SafeAreaView style={{flex: 1}}>
<FlatList
data={data}
ListHeaderComponent={ContentThatGoesAboveTheFlatList}
ListFooterComponent={ContentThatGoesBelowTheFlatList} />
</SafeAreaView>
您可以在此处了解更多信息: https //facebook.github.io/react-native/docs/flatlist#listheadercomponent
希望它可以帮助某人。:)
ScrollView
和FlatList
-你会得到不一致的滚动行为。此答案中显示的方式仅导致一个滚动容器,并且在页眉/页脚中可以放置任何视图,无论多么复杂。
useMemo
React提供的挂钩来记住ContentThatGoesAboveTheFlatList组件,以避免重新渲染。此处的更多信息:reactjs.org/docs/hooks-reference.html#usememo如果有帮助,请告诉我。:)
以防万一这对某人有帮助,这就是我解决此错误的方法。
我在FlatList
里面嵌套了ScrollView
:
render() {
return (
<ScrollView>
<h1>{'My Title'}</h1>
<FlatList
data={this.state.myData}
renderItem={({ item }) => {
return <p>{item.name}</p>;
}}
/>
{this.state.loading && <h2>{'Loading...'}</h2>}
</ScrollView>
);
}
并且ScrollView
通过使用FlatList
渲染了我需要的所有内容来摆脱了,从而摆脱了警告:
render() {
const getHeader = () => {
return <h1>{'My Title'}</h1>;
};
const getFooter = () => {
if (this.state.loading) {
return null;
}
return <h2>{'Loading...'}</h2>;
};
return (
<FlatList
data={this.state.myData}
renderItem={({ item }) => {
return <p>{item.name}</p>;
}}
ListHeaderComponent={getHeader}
ListFooterComponent={getFooter}
/>
);
}
查看文档中的示例,我从以下位置更改了容器:
<ScrollView>
<FlatList ... />
</ScrollView>
至:
<SafeAreaView style={{flex: 1}}>
<FlatList ... />
</SafeAreaView>
所有这些警告都消失了。
FlatList
内部上方渲染内容ScrollView
并希望该内容可滚动怎么办?
ScrollView
里面有一些内容,然后在FlatList
里面ScrollView
。我希望整个屏幕一起滚动。
我认为我可以使用map代替FlatList。但就我而言,我不会显示大量清单。不使用FlatList可能会导致性能问题。所以我用它来抑制警告https://github.com/GeekyAnts/NativeBase/issues/2947#issuecomment-549210509
出现警告是因为ScrollView
和FlatList
共享相同的逻辑,如果FlatList
在内部运行ScrollView
,则重复
顺便说一句SafeAreaView
对我不起作用,唯一的解决方法是
<ScrollView>
{data.map((item, index) => {
...your code
}}
</ScrollView>
错误消失
我尝试了一些方法来解决此问题,包括ListHeaderComponent
或ListFooterComponent
,但这都不适合我。
我想要实现的布局就是这样,并且我想滚动一次。
<ScrollView>
<View>I'm the first view</View>
<View>I'm the second view</View>
<MyFlatList />
</ScrollView>
首先,我要感谢 这个问题和评论,这给了我很多想法。
我在想 ListHeaderComponent
平面列表上方的位置,但是由于我Flatlist
的方向是专栏,因此我想要放置的标题位于Flatlist
:()的左侧
然后我不得不尝试一下VirtualizedList-backed
。我只是试图打包所有组件VirtualizedList
,在其中renderItems
给出索引,然后可以有条件地将组件传递给renderItems
。
我本可以使用进行此操作Flatlist
,但尚未尝试过。
最后看起来像这样。
<View>
<Virtualizedlist
data={[]}
initialNumToRender={1}
renderItem={(props)=>{
props.index===0 ? (1st view here) : props.index===1 ? (2nd view here) : (my flatlist)
}}
keyExtractor={item => item.key}
getItemCount={2}
getItem={ (data, index) => {
return {
id: Math.random().toString(12).substring(0),
}
}}
/>
</View>
(inside which lazyly renders↓)
<View>I'm the first view</View>
<View>I'm the second view</View>
<MyFlatList />
当然可以滚动整个屏幕
使用时会出现此问题 <FlatList />
<ScrollView>
相同方向的内部。
要解决此问题,只需在您的FlatList中添加“水平”即可:
<ScrollView>
<FlatList **horizontal** ... />
</ScrollView>
注意:您的FlatList将水平呈现