javascript - React Native - 如何更新 FlatList 的帖子(新的喜欢,...)
问题描述
介绍
我正在开发一个帖子列表,该列表嵌套在一个平面列表中,该列表实现了拉动刷新,并且每个帖子(呈现在卡片中)都有上传它的用户的头像。此外,用户可以更改其头像,因此我需要使用新的用户头像更新帖子 FlatList。
我已经阅读了有关 ExtraData 道具的一些内容,但在我的情况下不起作用。
代码
// Posts Screen
export default function Posts(props) {
const {
userData: {
username,
avatar
}
} = props;
const [data, setData] = useState([]); // [{ avatar, username, photoUri, likes }, ...]
let previousAvatar = useRef(avatar).current;
// ... Fetch the data
// This is the wrong(?) stuff I am doing to update the FlatList
useEffect(() => {
if (previousAvatar !== avatar) {
// For each post, change the avatar
setPosts(
posts.map((post) => ({
...post,
avatar: avatar,
}))
);
// Save the new avatar
previousAvatar = avatar;
}
}, [ownerData]);
return (<FlatList data={data} renderIt... />)
}
我在做什么
当我检测到用户已更改其头像时,我会修改传递给 FlatList 的数据,从而更改头像 uri。我认为这很糟糕,因为列表中可能有 100K 帖子......
另外,当新喜欢,新用户名时,我需要更新平面列表......所以我认为这是不可行的
我试过的
// Posts Screen
export default function Posts(props) {
const {
userData
} = props;
...
return <FlatList data={data} extraData={userData} ... />
}
在文档中说“通过将 extraData 传递给 FlatList,我们确保 FlatList 本身在状态更改时会重新渲染。”,但对我来说,这不起作用,因为 userData 是通过道具接收的。
有任何想法吗?谢谢你。
解决方案
flatList 将呈现数据而不是 extraData。每次需要更新列表时,尝试将 extraData 设置为布尔值并反转布尔值。
推荐阅读
- python - 变量已定义但未定义
- python - aws-lambda - python 教程指的是“virtualenv”和“source”
- java - 在 for 循环中初始化变量
- excel - 如何比较 Excel 中不同列中的两个日期以查找一个日期早于另一个日期的行?
- html - 导航栏子菜单未与菜单项对齐
- ecmascript-6 - Vuex:提交一个对象,然后通过 ID 找到它
- python - pymysql事务保存一个插入查询但忽略两个更新查询而不引发错误
- java - 泛型中的编译类和运行时类
- auth0 - 未从 Auth0.authorize() 获取刷新令牌 - PKCE
- javascript - 检查公会 ID 的数组列表