【问题标题】:React Native: optimizing list of itemsReact Native:优化项目列表
【发布时间】:2019-06-29 03:28:44
【问题描述】:

我有一个项目列表,每个项目都有一个正文和一个来源。目前它呈现如下:

const ListItem = (props) => {
    const {body, source} = props.context;

    return (
        <View style={styles.item}>>
            <View style={{backgroundColor: 'lightblue'}}>
                <Text style={styles.body}>{body}</Text>
            </View>
            <View style={{backgroundColor: 'lightyellow'}}>
                <Text style={styles.source}>{source}</Text>
            </View>
        </View>
    );
}

这是很多嵌套和容器。能不能做得更优化?

【问题讨论】:

  • 我想这取决于你的设计,AFAIK 这在 React Native 中很好,前提是你正在使用优化的方式来呈现你的列表(例如,使用 FlatList 或类似的)
  • @Dan 所有外部优化,如 FlatList 都已到位。我只是好奇有没有办法跳过如此可怕的视图树或者可以这样做。

标签: performance react-native dom optimization


【解决方案1】:

我将发表我的评论作为答案。

上一条评论:

我想这取决于你的设计,AFAIK 这在 React Native 中很好,假设你正在使用一种优化的方式来呈现你的列表(例如,使用 FlatList 或类似的)

根据您的以下评论,我认为这根本不是可怕

这是另一种选择。但是,为了便于阅读,我更喜欢您在问题中发布的 sn-p。

const ListItem = props => {
  const items = [
    { key: 'body', backgroundColor: 'lightblue' },
    { key: 'source', backgroundColor: 'lightyellow' }
  ];
  return (
    <View style={styles.item}>
      {
        items.map(({ key, backgroundColor }) => 
          <View style={{ backgroundColor }}>
            <Text style={styles[key]}>
              { props[key] }
            </Text>
          </View>
        )
      }
    </View>
  )
}

【讨论】:

    【解决方案2】:

    Text 组件确实采用了 backgroundColor,因此您可以放开两个 View:

        <View style={styles.item}>
            <Text style={[styles.body, {backgroundColor: '...'}]}>{body}</Text>
            <Text style={[styles.source, {backgroundColor: '...'}]}>{source}</Text>
        </View>
    

    另外,我不知道styles.item由什么组成,但是如果你想一路走下去,你可能会用React.Fragment替换另一个容器View。

    【讨论】:

    • 不幸的是,这段代码不等于源代码——文本会一个之后而不是一个另一个。
    • @DenisKulagin 你确定这段代码不等于源代码吗?对我来说,视图中的两个文本组件将一个在另一个之上。如果您希望它们一个接一个,只需将 flexDirection: 'row', 添加到 View 样式中。
    • 我是 React Native 的新手,所以我可能弄错了。我会检查。无论如何,感谢您指出这一点。
    • @DenisKulagin np,编码愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多