【发布时间】:2018-11-28 19:38:52
【问题描述】:
当我使用 React 和 Redux 时,有一个问题让我很困扰。在我的应用程序中,我有自己的 API 中间件,用于使用普通操作进行 api 调用。它在引擎盖下进行 fetch 并返回 Promise,效果很好。但有时我有一种感觉,我想获得的数据不适合我的商店,不应该在那里。它只对单个组件很重要,不应该是全局的。
我的意思是什么,这就是我通常进行数据获取的方式。我制作了这样的动作创建器:
dispatch(apiCall({ url, type, typePrefix })
typePrefix 是请求、成功和失败操作的前缀,例如。 ${typePrefix}/REQUEST。之后,我可以在 reducer 中对这些操作做出反应。
现在,有时我想在我的提供程序/容器组件中创建fetch,将其保存到本地状态并将其传递给演示组件。
当我使用 Redux 时,thunk(或 sagas)是执行数据获取的唯一方法,还是有时将获取的数据保留在本地是否可以?我没有发现任何关于它的问题。
【问题讨论】:
-
没有一般的答案,但是 IMO Redux 存储是用于需要在组件之间共享的状态——如果只有单个组件或小树需要数据,就没有理由在整个应用程序之间共享数据或者必须对与该数据相关的“事物”采取行动(例如它是否已被检索到)。与 Redux 相同的原因,拥有组件状态与将 Redux 状态映射到 props 仍然是有意义的。也就是说,在商店中提供它意味着您可以用它做您最初没有预料到的事情。
-
是的,本地状态是必不可少的,我从来没有觉得我必须将所有东西都放在商店中,但如果动作创建者是一种执行副作用的方式,那么它的含义应该是商店更新。正如我所说,有时我只想获取数据但不存储它,我想知道已经使用 Redux 是否可以。
-
数据的来源并不重要,例如,对于 UI 组件的本地状态,没有理由使用 Redux,即使它可能正在使用来自 Redux 存储的数据。这可以很容易地扩展到外部获取的资源。最终,它总是归结为在您的应用程序上下文中有意义的内容,并且没有理由以后不能更改。 Redux 不是“全有或全无”,它是“按需”,没有理由不混合状态。
标签: javascript reactjs redux