何时将 Flux(等)与 React 一起使用?

When to use Flux (etc.) with React?

作为学习过程,我一直在开发一个相当简单的 React 应用程序,并希望开始结合 Flux(或者更可能是 Redux)来继续学习。

实现类似 Flux 的解决方案的代码看起来 相当 简单明了,但我不太清楚什么时候合适以及应该如何安排最佳实践感觉。

用外行的话来说,我对常见用例的最佳猜测是 Flux 允许组件相互通信而无需传递通用属性,因此考虑到这一点,这是我希望的示例在我的应用程序中使用 Flux:

假设我有一个用户配置文件组件,它通过 ajax 调用定期刷新。当此调用等待返回其数据时,加载微调器 gif 显示在页面的其他位置 - 而不是在触发 ajax 调用的组件的父级或子级中。在这种情况下,我将如何使用 Flux 在适当的时刻提示微调器 display/hide(即从发送请求开始,在收到响应时结束)?如果它的可见性是由配置文件组件的状态定义的,那很容易,但显然我需要一个组件来与我想你可以称之为远亲的东西进行通信。

我将如何安排我的动作、reducer 和诸如此类的东西来实现这个目标?

我不是在找任何人在这里为我编写代码,因为我肯定会通过这样做更好地学习,但我非常感谢关于在这种情况下使用的方法的一些一般性建议.

非常感谢!

Redux 基本上为您提供任何组件都可以连接到的全局状态。

因此,对于您的 ajax 调用,您需要进行 3 次操作。查看 the Redux docs for creating async actions.

GET_USER_PROFILE_START
GET_USER_PROFILE_SUCCESS
GET_USER_PROFILE_ERROR

然后你将拥有

的减速器
userProfile
isUserProfileLoading

当您触发 ajax 请求时,您的异步操作将首先触发您的 GET_USER_PROFILE_START 操作,它将被您的 isUserProfileLoading reducer 拾取并设置 isUserProfileLoadingtrue.

然后当请求返回时,如果成功,它将触发 GET_USER_PROFILE_SUCCESS,有效负载为 userProfile。您的 userProfile reducer 将收到 userProfile 并将其设置为状态。

您的 isUserProfileLoading reducer 也将监听 GET_USER_PROFILE_SUCCESS 并在看到该操作时将 isUserProfileLoading 设置回 false

如果您的请求失败,您将使用 error 负载触发 GET_USER_PROFILE_ERROR 操作,并在 UI 中执行某种通知。你的 isUserProfileLoading reducer 也会监听 GET_USER_PROFILE_ERROR 并且当它看到它时也会将 isUserProfileLoading 设置回 false

现在,您应用中的任何组件,无论它在页面上或组件层次结构中的什么位置,都可以查看 isUserProfileLoading 并在设置为 true 时呈现加载微调器。

希望对您有所帮助。