何时将 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 拾取并设置 isUserProfileLoading
到 true
.
然后当请求返回时,如果成功,它将触发 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
时呈现加载微调器。
希望对您有所帮助。
作为学习过程,我一直在开发一个相当简单的 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 拾取并设置 isUserProfileLoading
到 true
.
然后当请求返回时,如果成功,它将触发 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
时呈现加载微调器。
希望对您有所帮助。