我想在FlatList中更改项目的样式,例如color或fontSize,我检查了一些问题,例如this one或this one,但是它们在我的代码中不起作用。如果我使用循环而不是FlatList,则可以成功更改项目的样式。
这是我的代码
let jobCategory= [
{
"id": "a",
"name": "1",
},
{
"id": "b",
"name": "2",
},
{
"id": "c",
"name": "3",
},
{
"id": "d",
"name": "4",
},
{
"id": "e",
"name": "5",
},
{
"id": "f",
"name": "6",
},
]
const styles = StyleSheet.create({
categoryUnselectedStyle: {
paddingTop: pxToDp(25),
paddingBottom: pxToDp(25),
paddingRight: pxToDp(30),
paddingLeft: pxToDp(30),
backgroundColor: '#f4f6f7',
},
categoryselectedStyle: {
backgroundColor: 'white',
},
categoryTextUnselectedStyle: {
color: '#666666',
fontSize: pxToDp(28)
},
categoryTextselectedStyle: {
color: 'lightblue',
fontSize: pxToDp(40),
},
});
const JobExpectPage = (props) => {
const [categorySelected, setCategorySelected] = useState("")
const renderJobCategory = ({ item }) => {
return (
<TouchableOpacity
key={item.id}
onPress={() => setCategorySelected(item.id)}
style={[styles.categoryUnselectedStyle, categorySelected == item.id && styles.categoryselectedStyle]}
>
<View>
<Text style={[styles.categoryTextUnselectedStyle, categorySelected == item.id && styles.categoryTextselectedStyle]}> {item.name}</Text>
</View>
</TouchableOpacity>
)
}
return (
<View>
<FlatList
data={jobCategory}
renderItem={renderJobCategory}
</View>
)
}
我希望在按下项目后,它的样式会改变。没有FlatList我已经成功了,如何使用FlatList做到呢?
答案 0 :(得分:1)
这里的问题是,由于array jobCategory
始终相同,因此不会重新提交单位列表。
您必须将属性extraData添加到Flatlist并传递categorySelected钩子,这样,flatlist便知道当categorySelected更改时,它必须重新呈现,请执行以下操作:
return (
<View>
<FlatList
data={jobCategory}
renderItem={renderJobCategory}
extraData={categorySelected}
</View>
)
通过将extraData = {categorySelected传递给FlatList,我们确保 当categorySelected更改时,FlatList本身将重新呈现。 如果不设置此道具,FlatList将不知道需要 重新渲染任何项目,因为它也是PureComponent和prop 比较不会显示任何更改。