[英]FlatList is not rerendering upon data change
I have an array of conversations and a function that checks if the recipient is online.我有一系列对话和一个检查收件人是否在线的功能。 However when that function changes its return value (boolean), the flatlist does NOT rerender.
但是,当该函数更改其返回值(布尔值)时,平面列表不会重新呈现。 I tried extraData but with no luck.
我尝试了 extraData 但没有运气。 My code is:
我的代码是:
flatList平面列表
<FlatList
data={conversations}
extraData={isRefreshing}
renderItem={(conversation) => (
<TouchableOpacity
onPress={() => selectConversation(conversation.item)}
style={{
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
borderBottomWidth: 1,
padding: 5,
marginBottom: 5,
}}
>
<View>
<Text>{getRecipient(conversation.item).displayName}</Text>
<Text>{conversation.item.latestMessage}</Text>
</View>
{isUserOnline(conversation.item) && (
<Text style={{ color: "green" }}>ONLINE</Text>
)}
</TouchableOpacity>
)}
keyExtractor={(item) => item._id}
/>
useEffect使用效果
useEffect(() => {
let handler = (data) => {
console.log(data);
setOnlineUsers((prevState) => {
return data;
});
setRefreshing(!isRefreshing);
};
const unsubscribe = navigation.addListener("focus", () => {
console.log("focused");
socket.on("online-users-data", handler);
socket.emit("join-online-users");
getConversations();
});
return () => {
socket.emit("leave-online-users");
socket.off("online-users-data", handler);
unsubscribe();
};
}, []);
isUserOnline() isUserOnline()
function isUserOnline(conversation) {
const user = getRecipient(conversation);
const onlineUser = onlineUsers.find((u) => u.userId === user._id);
return (
user && onlineUser && user._id.toString() === onlineUser.userId.toString()
);
}
I have solved this by adding onlineUsers
to extraData
.我通过将
onlineUsers
添加到extraData
解决了这个问题。 Damn it was confusing.该死的令人困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.