Pir*_*hah 8 react-native react-native-flatlist
FlatList有numColumns支持.如何numColumns使用SectionList进行设置?
Github问题:SectionList renderItem多项支持#13192
Pir*_*hah 20
这是我numColumns对SectionList的解决方案.如果你有更好的请告诉我.
class Example extends Component {
static propTypes = {
numColumns: PropTypes.number
};
static defaultProps = {
numColumns: 2
};
_renderSection = data => <Section {...data} />;
_renderItem = ({ section, index }) => {
const { numColumns } = this.props;
if (index % numColumns !== 0) return null;
const items = [];
for (let i = index; i < index + numColumns; i++) {
if (i >= section.data.length) {
break;
}
items.push(<Item item={section.data[i]} />);
}
return (
<View
style={{
flexDirection: "row",
justifyContent: "space-between"
}}
>
{items}
</View>
);
};
render() {
return (
<SectionList
sections={dumyData}
style={styles.container}
renderItem={this._renderItem}
renderSectionHeader={this._renderSection}
/>
);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
挖掘这个问题,我提出了一个类似于 Pir Shukarullah Shah 的解决方案。
我使用 FlatList 而不是我的常规项目,只考虑<SectionList/>'s renderItem方法中的第一个项目。
_renderList = ({ section, index }) => {
if (index !== 0) return null;
return (
<FlatList numColumns={columns}
columnWrapperStyle={styles.container}
data={section.data}
renderItem={this._renderItem}
keyExtractor={keyExtractor}
/>
)
}
...
<SectionList
renderItem={this._renderList}
renderSectionHeader={this._renderSectionHeader}
sections={itemList}
keyExtractor={keyExtractor}
/>
Run Code Online (Sandbox Code Playgroud)
小智 8
我发现有一个简单的解决方案。请尝试将以下属性添加到
contentContainerStyle={{
flexDirection : 'row',
justifyContent : 'flex-start',
alignItems : 'flex-start',
flexWrap : 'wrap'
}}
Run Code Online (Sandbox Code Playgroud)
此外,设置并渲染Section Header,其宽度等于SectionList 宽度。否则,列表项将按行方向显示在节标题之后。
可以使用带有 numColumns 属性的 FlatList 作为 SectionList 的 renderItem。
const data = [ //Notice [[...]] instead of [...] as in the RN docs
{data: [[...]], title: ...},
{data: [[...]], title: ...},
{data: [[...]], title: ...},
]
render () {
return (
<SectionList
renderItem={this._renderSectionListItem}
renderSectionHeader={this._renderSectionHeader}
sections={data}
/>
)
}
renderSectionListItem = ({item}) => {
return (
<FlatList
data={item}
numColumns={3}
renderItem={this.renderItem}
/>
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4082 次 |
| 最近记录: |