【发布时间】:2021-01-03 08:44:19
【问题描述】:
我有一个空数组,我将它传递给我的flat-list。
我还使用useEffect 从服务器获取数据并更新列表。
但是,在使用数据设置数组的新状态后,flat-list 不会重新渲染。
const [listData, setlistData] = React.useState<Transaction[]>([])
const [dataUpdated, setDataUpdated] = React.useState<boolean>(false)
React.useEffect(() => {
if(route.params.showAllData)
{
fetchTransactions(1, TRANSACTION_PAGE_SIZE, 1)
.then((res: Transaction) => {
console.log(`TransactionsScreen: userEffect [] => fetched ${JSON.stringify(res)}`);
setlistData(prevState => ({...prevState, ...res}));
setDataUpdated(true)
})
.catch(err => {
//TODO: handle error scenerio
ToastAndroid.show(`Failed to fetch transacrions`, ToastAndroid.SHORT)
})
}}, [])
<FlatList
data={listData}
renderItem={item => _renderItem(item)}
ItemSeparatorComponent={TransactionListSeparator}
extraData={dataUpdated} // extraData={listData <--- didn't work either}
keyExtractor={item => item.id.toString()}/>
我尝试将数据数组添加为 extraData 值,但它不起作用,我还尝试添加另一个布尔值,通知数据已更新,但它也不起作用。
如何正确重新渲染flat-list?
【问题讨论】:
-
您的 useEffect 依赖为空,通过控制台记录检查您的
listData是否正在更新 -
@GayatriDipali,它确实发生了变化,我在 listData 上还有另一个
useEffect(我没有在此处发布),它记录了更新的值。 -
你可以尝试传递当前时间状态的密钥吗?
标签: reactjs react-native react-native-flatlist react-typescript