如何在React Native的列表中的某些位置使用不同的样式?

时间:2017-10-03 18:44:54

标签: javascript css reactjs react-native

我试图为列表中的第一个和最后一个项目设置不同的样式,如下图所示:

enter image description here

第一张卡片右上角有圆角,最后一张卡片右下角有圆角。我还在弄清楚如何解决这个问题。

有没有办法将列表中项目的位置传递给项目本身,以便它可以应用于不同的样式?还是有其他更好的方法?

此外,如果只有一张卡片存在,我希望卡片上下角为圆角,如下所示:

enter image description here

2 个答案:

答案 0 :(得分:6)

使用ListView / FlatList / SectionList渲染方法渲染项目时具有索引参数。您可以使用该索引来确定该项目是第一个还是最后一个,并为该项目提供条件样式。

示例

renderItem = ({item, index}) => {
  if (index === 0) return <ListItem style={styles.firstItem} data={item} />
  else if (index === (this.state.data.length -1)) return <ListItem style={styles.lastItem} data={item} />
  else return <ListItem style={styles.item} data={item} />
}

render() {
  return <FlatList data={this.state.data} renderItem={this.renderItem} />
}

答案 1 :(得分:0)

使用styled-components,您可以执行以下操作:

import styled, { css } from "styled-components";

const Item = styled.div`
  background-color: red;

  ${props => props.isFirst && css`
    background-color: blue;
  `}

  ${props => props.isLast && css`
    background-color: yellow;
  `}
`;

function() {

  const items = [];

  return (
    <>
      ...
      {items.map((item, index) => {
        <Item
          key={item.id}
          isFirst={index === 0}
          isLast={index === items.length - 1 }
        />
      })}
      ...
    </>
  );
}

更具可读性的恕我直言。