很长一段时间以来,我一直在纠结于状态管理,但有一个问题我正在努力解决。假设您的应用程序有一个名为“用户资料”的功能,类似于 Facebook 或 Instagram 的。用户可以多次打开用户页面,如果他们更新个人资料中的某些内容(例如帖子),则必须更新该用户的所有个人资料页面。现在在 React Native 中,我会有一个用户状态,它是 {user_id -> user_profile} 的映射。所有需要用户数据的用户配置文件页面都将引用具有特定用户 ID 的用户配置文件。因为用户 ID 只有一个用户配置文件,所以如果我更新某些内容,所有页面都会更新。
我在 Flutter 中有类似的设置。我有一个UserProfilesChangeNotifier
包含 Map<user_id, user_profile>。每次打开用户页面时,我都会ChangeNotifierProvider.value
向它提供地图。在initState
,我会检查特定的 user_id 是否存在于 Map 中,如果不存在,则UserProfilesChangeNotifier
必须从服务器获取数据。在build
方法中,我将使用 读取用户数据userProfile.map[user_id]
,同样我也通过UserProfilesChangeNotifier
(附带 notifyListeners() )更新数据。我可以想到此设置存在一些问题:
- 根据 Flutter 文档,您应该避免使用
ChangeNotifier
大量侦听器,因为它是 O(N²) 来调度通知。在我的情况下,许多用户页面将不得不听它。它可以解决ChangeNotifierProvider
吗? - 如果用户打开 id 为 1、2、3、4 的用户的个人资料页面,然后继续更新 id 为 4 的用户中的数据(将其写入 Map 和
notifyListeners
),则用户 1、2、3 的所有用户页面都必须重建以及,虽然不需要。
我觉得我的设置有很大缺陷,可能需要改进。在这种情况下你会怎么做?