【问题标题】:Am i implementing redux correctly in my ReactNative app?我是否在我的 ReactNative 应用程序中正确实现了 redux?
【发布时间】:2016-09-22 17:49:17
【问题描述】:

我正在使用 ReactNative 和 Redux 实现一个移动应用程序,我正在实现的应用程序如下所示:

Login (screen) 
|--> Search for an object (screen)
   |--> Show that object and edit it (screen)
      |--> Take 2 photos (each photo a screen)
         |--> A last screen for make a new object and save it

上面的流程显示了每个屏幕如何工作并传递到下一个屏幕。

我的应用状态是下一个:

{
  auth: {
    logged: false,
    token: ''
  },
  somethingOfSideBar...
}

但我觉得我做错了,因为大多数屏幕都有自己的状态,例如 searchSomethingScreen 从服务器获取数据,检查它是否有效并启用传递到下一个屏幕。我觉得我没有以 Redux 的方式做事,它假设做出改变整个状态应用程序的操作,但我觉得我不需要比我拥有的更多的状态。对我来说,全局的东西是身份验证数据和侧边栏(因为它存在于整个应用程序中)。

我应该为每次屏幕更改都采取行动吗? 我应该在全局状态应用程序中添加更多信息吗?

还有一件事,我有一个 AppContainer 组件,它用于连接以访问商店,但我正在传递部分状态和动作以及子属性,我觉得这也是错误的。

【问题讨论】:

    标签: react-native redux react-redux


    【解决方案1】:

    我觉得Redux Reddit tutorial 可能对您有用。这当然是给我的。

    但我觉得我做错了,因为大多数屏幕都有自己的状态,例如 searchSomethingScreen 从服务器获取数据,检查它是否有效并启用传递到下一个屏幕。

    Redux 的方式使用,API 请求及其成功完成应该每个都映射到一个操作。在每个操作上适当地更改应用程序状态(在您的缩减功能中),并且绑定到您的商店的视图/屏幕将重新呈现。因此,如果您正在发出 API 请求:

    • 创建一个Search 容器,将状态searchResults 映射到props 并绑定一个Search 组件。 (例如,请参阅this container。)
    • 触发动作REQUEST_SEARCH,用户输入带有搜索词。
    • AJAX 请求被触发。
    • AJAX 请求成功完成。带有搜索结果的射击动作 RECEIVE_SEARCH
    • SearchReducer 存储搜索结果。
    • 绑定的Search 组件随搜索结果重新呈现。

    我应该为每次屏幕变化都采取行动吗?我应该在全局状态应用程序中添加更多信息吗?

    一般来说,是的。但有时我会使用组件状态(不调度操作)来存储组件本地的状态(例如更新文本字段)。

    还有一件事,我有一个 AppContainer 组件,它用于连接以访问商店,但我正在传递部分状态和动作以及子属性,我觉得这也是错误的。

    一般来说,更高级别的组件应该是容器,它通过 props 将状态注入到无状态组件中。您可以拥有多个容器,它们像组件一样工作,因此您可以将一个容器嵌套在另一个容器中。我鼓励您查看文档,因为它对我非常有用。 :)

    【讨论】:

    • 感谢您的回答,它给了我一些东西来开始重构我的应用程序。当您说:AJAX 被触发时,我应该在“REQUEST_SEARCH”操作中进行 fetch 调用吗?
    • 是的,没错。 fetch() is a Then-able,因此您可以添加触发RECEIVE_SEARCH 的成功回调。 :)
    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2020-05-03
    • 2012-09-02
    • 2016-01-24
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多