【问题标题】:Using Map vs. Flatlist in React Native在 React Native 中使用 Map 与 Flatlist
【发布时间】:2020-04-23 08:05:55
【问题描述】:

我正在努力在状态对象的数组上正确使用 .map() 来显示元素。这是我的代码

class EventListFront extends Component {
    state = {
        currentEvent: new event(),
        events: new eventList(),
    }
...
<View>
   {this.state.events.events.map(event => {
        <View key={event.id}>{event.title}</View>})}

</View>

我的事件结构如下:

class event {
    constructor(
        id = -1,
        name = 'UNSET',
        description = 'UNSET',
        location = 'UNSET',
        ...
        ) {}

(eventList是一个事件数组,它冗余地有一个标识符'events')

有了这个实现,当我添加到数组中时,我什么都没有显示。我尝试过使用 FlatList,但这需要每个元素的键/ID。我不知道该怎么做

  1. 添加新事件时使用新列表更新页面
  2. 使用 .map() 获取要在元素中显示的事件元素
  3. 使用生成的 ID,以便它可以使用 FlatList 正确呈现。

【问题讨论】:

  • 您需要从地图功能中返回
  • 返回最里面的视图有关系吗?还是我需要返回另一个元素? @TomSlutsky

标签: javascript arrays react-native react-native-flatlist


【解决方案1】:

您的代码中似乎有几个问题:

  • 正如 Tom Slutsky 评论的那样,您需要在传递给 map 函数的回调中返回组件。箭头函数的返回值有多种情况,具体取决于您编写它们的方式。 Syntax of arrow functions
  • 似乎您在事件中总是使用相同的 id (-1),但是在呈现项目列表时,React 要求每个组件具有唯一的键。如果您使用 set setState 在事件数组中推送一个新项目来更新您的状态,您的组件将被重新渲染和更新。

关于 Flatlist 的使用,它们具有性能优化,如果您处理很长的组件列表,这将非常有用。如果您使用地图,即使组件在屏幕上不可见,您的所有列表也会被渲染。使用 Flatlist,仅呈现可见的组件。

【讨论】:

  • 我现在已经设置了我的 id,以便它可以是一个唯一的数字,但我想我在使用地图时仍然有点迷茫。我会用我的信息返回那些相同的最里面的视图标签,还是需要使用另一组标签?另外,我知道页面会随着组件的更改而更新,但我不确定这种情况是否会发生。我是否必须使用 forceUpdate 来更新我的信息列表,还是会自动更新? @罗曼
  • @Andre,你应该编写你的 map 函数如下:&lt;View&gt; {this.state.events.events.map(event =&gt; ( &lt;View key={event.id}&gt;{event.title}&lt;/View&gt; )} &lt;/View&gt; 使用括号意味着你正在从你的箭头函数返回一个对象,括号内的是对象。或者在这种情况下你可以不用括号。但是如果你在箭头之后使用大括号(就像你一样),你需要声明“return”来告诉地图回调在数组中返回什么。目前你的地图函数返回 undefined 我认为
猜你喜欢
  • 2018-06-14
  • 1970-01-01
  • 2018-02-05
  • 2018-05-09
  • 2020-01-25
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
相关资源
最近更新 更多