我可以在平面列表中使用 ItemSeparatorComponent 中的组件吗?

Can I use component in ItemSeparatorComponent in flat list?

我在想如何在Flat list

中使用ItemSeparatorComponent

如果我使用它就有效:

import Seperator from '../Seperator';

        <FlatList
          ItemSeparatorComponent={() => <Seperator />}
          data={this.props.x}
          renderItem={({ item }) => this.renderX(item)}
        />

我可以像下面这样使用 <Seperator /> 吗?

import Seperator from '../Seperator';

           <FlatList
              ItemSeparatorComponent={ <Seperator />}
              data={this.props.x}
              renderItem={({ item }) => this.renderX(item)}
            />

没用!为什么?

如果您的 <Separator/> 是没有生命周期方法的无状态组件,您可以将它们更改为功能组件,如下所示:

import React from 'react'
import {View} from 'react-native'

const Separator= (props) =>
  <Text>{...}</Text>

export default Separator

这样做时,您不需要明确的 return。如果您坚持使用 class 组件(带有状态、生命周期方法或渲染...),则需要使用箭头函数(隐式 return)。

() => <Separator /> 有效而 <Separator /> 无效的原因是因为 ItemSeparatorComponent 需要 函数 呈现元素,而不是元素本身.

这是因为您指定为分隔符的组件会在填充列表时动态呈现,而不是就地呈现(这是 <Component /> 语法的作用)。

在您的工作示例中,您使用的是 () => <Separator />。除非您使用 class 组件,否则这是多余的,因为您的代码在这种情况下所做的就是创建一个匿名函数,然后呈现您的组件。 如果您使用的是无状态功能组件(人们希望它只是一个分隔符),您可以将其写为 ItemSeparatorComponent={Separator}