我知道外面有很多關于這方面的問題和答案,但我對react native相當陌生,而且大多數答案都是關于React組件而不是鉤子的。在下面的例子中,availableInterests是從firestore資料庫中呼叫的。然后我們回圈瀏覽availableInterests,這樣用戶就可以從Flatlist of interests中選擇他們的興趣。一切都很好,除了FLatlist沒有重新渲染,所以用來選擇currentInterests的按鈕從來沒有顯示過興趣被選中的變化。有誰知道我在這里錯過了什么嗎?
const [availableInterests, setAvailableInterests] = useState([]);
const [currentInterests, setCurrentInterests] = useState([]);
const selectThisInterest = (item) => {
let myInterests = currentInterests;
如果(myInterests.includes(item.id)) {
myInterests.pop(item.id)。
} else {
myInterests.push(item.id)。
}
setCurrentInterests(myInterests);
}
return <View>
<Text style={styles.text}>選擇你的興趣:</Text>
<FlatList
data={availableInterests}。
keyExtractor={(item, index) => index.toString()}。
extraData={currentInterests}
renderItem={({專案, 索引 }) =>
<View key={item.id}>
<Text>{item.title}</Text>
<Text>{item.description}</Text>
<影像
source={{ uri: item.icon }}.
style={{寬度:100,高度:100}}。
/>
<TouchableOpacity onPress={() => selectThisInterest(item)}>
<文本 style={styles.buttonText}>{`${currentInterests.includes(item.id) ? 'UnSelect' : 'Select'}'}</Text>
<Text>{item.id}</Text>
</TouchableOpacity>
</View>
}>
</FlatList>
</View>
uj5u.com熱心網友回復:
把這個狀態放在下面
const [currentInterests, setCurrentInterests] = useState([]);
const [extra, setExtra] = useState(0);
在你的函式的結尾處,只需寫上這個
const selectThisInterest = (item) => {
....
setExtra(extra 1)
}
uj5u.com熱心網友回復:
我認為錯誤在于你的selectThisInterest函式。當你根據之前的值更新currentInterests時,React并沒有識別這樣的變化,因為你只是用你的currentInterests來分配myInterests。
您要做的是復制該陣列并將其分配給myInteresets,然后將您的值更新到新復制的陣列。一旦在新的myInteresets陣列上完成計算,setCurrentInterests()將重新渲染應用程式,因為現在React認識到狀態發生了變化。
要復制陣列,你可以使用,
let myInterests = [...currentInterests]。
改變你的selectThisInterest函式以反映這一變化,
const selectThisInterest=(item)=> {
let myInterests = [...currentInterests] 。
if(myInterests.includes(item.id) }{
myInterests.pop(item.id)。
} else {
myInterests.push(item.id)。
}
setCurrentInterests(myInterests)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309144.html
標籤:
下一篇:<p>我有兩個df,其中一個我想只保留最近的資料,即df1作為一個滾動記錄,而df2向它提供資訊。 <p>如果有一個ID出現在df1中而沒有出現在df2中,我想從df1的新迭代
