[英]How to conditionally render these items in a React-Native Flatlist
我得到一個看起來像這樣的 json object:
Array [
Object {
"department": "department 1",
"formName": "form 1",
"id": 1,
},
Object {
"department": "department 1",
"formName": "form 2",
"id": 2,
},
Object {
"department": "deparment 1",
"formName": "form 3",
"id": 3,
},
Object {
"department": "department 1",
"formName": "form 4",
"id": 4,
},
Object {
"department": "department 2",
"formName": "form 5",
"id": 5,
},
]
如您所見,只有 2 個獨特的部門,但有 5 個不同的 forms。 forms 的 4 個屬於部門 1,其余形式屬於部門 2
我正在嘗試渲染 2 個看起來像這樣的按鈕:
部門 1
部門 2
這是我目前擁有的平面列表組件
<FlatList
data={this.state.dataList}
keyExtractor={(item) => item.id.toString()}
renderItem={({ item }) => {
return (
<TouchableWithoutFeedback
onPress={console.log("touched")}
style={styles.clearBtn}
>
<Text style={styles.clearBtnText}>{item.department}</Text>
<Text style={styles.clearBtnText2}>{item.formName}</Text>
</TouchableWithoutFeedback>
);
}}
/>
但是,這顯然會呈現 5 個如下所示的按鈕:
部門 1
部門 1
部門 1
部門 1
部門 2
您可能想要重塑您的數據並使用SectionList
而不是FlatList
,它看起來更適合您的用例。
官方文檔在這里,如果我們通過他們的示例 go 您的數據應該類似於:
[
{
title: 'Department 1',
data: [{formName: 'form1', id: 1} ,{formName: 'form2', id:2} ...]
},
{
title: 'Department 2',
data: [{formName: 'form5', id: 5}]
}
]
你的SectionList
渲染看起來像
<SectionList
sections={this.state.dataList}
keyExtractor={(item) => item.id.toString()}
renderSectionHeader={({ section: { title } }) => (
<Text style={/*Whatever style you want*/}>{title}</Text>
)}
renderItem={({ item }) => {
return (
<TouchableWithoutFeedback
onPress={() => console.log("touched")}
style={styles.clearBtn}
>
<Text style={styles.clearBtnText2}>{item.formName}</Text>
</TouchableWithoutFeedback>
);
}}
/>
假設this.state.dataList
是我提出的數據 model
正如@Ron B. 建議的那樣,您需要將數據從平面轉換為部分數組結構,如下所示。
const flatToSection = (data)=>{
const getDepartmentData = (department,data)=>{
return data.filter(item=> item.department === department)
}
const departments =[...new Set( data.map(el=> el.department))]
const sections = departments.map((department)=>({
title:department,
data :getDepartmentData(department,data)
}))
return sections
}
export default flatToSection
然后將 FlatList 替換為 Section 列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.