【问题标题】:Usage of mutable objects inside React Native + Redux app在 React Native + Redux 应用程序中使用可变对象
【发布时间】:2016-10-02 20:21:58
【问题描述】:

我是 React(尤其是 React Native)的新手,我正在尝试提出正确的应用程序设计。

我有一个单独的 JavaScript 模块,与 React 无关;该模块包含一些带有方法的对象,其中一些改变对象,一些具有副作用(例如,订阅/取消订阅/从服务器事件,或添加/删除本地对象事件的侦听器)等。

我想在我的 React Native 应用程序中重用这个 JavaScript 模块,但它似乎不能很好地协同工作。在 Redux(以及其他一些状态管理器)中,状态需要表示为一个普通的不可变 JS 对象,而不是改变现有对象,而是创建新对象。所以我不能直接使用我现有的 JS 对象作为状态。

我可能可以在我现有的 JS 代码周围使用一些包装器(变异,并且充满副作用),但这似乎不是一个好的解决方案:大量重复,最终结果不太可能是优雅的。

另一方面,我不太高兴重新实现整个东西以适应 React 的世界,使其符合习惯。

另一方面,我可以忘记 Redux,并使用 React 组件的普通 state,但我觉得这会是一团糟。

我想从有经验的 React + Redux 人那里得到一些建议。你会推荐什么?

【问题讨论】:

    标签: javascript reactjs react-native redux


    【解决方案1】:

    如果不看神秘模块做了什么或暴露了什么,就很难准确地说出来。但是考虑将模块转换为一个或多个减速器,然后使用 Redux 的combineReducers 来定位将专门包含在您的模块中的整个存储的部分。

    然后你需要添加 reducer 方法,这些方法总是按照 Redux 的要求返回新对象,但你不需要修改现有代码中的每个函数。

    This article by Dan Abramov 帮助我了解了减速器的组成。

    另请参阅文档中的 Handling Actions 以获取有关如何编写仅修改一小部分存储的良好 reducer 方法的帮助。

    【讨论】:

    • 谢谢。我的问题基本上是:我可以重用具有变异方法和具有副作用的方法的现有代码,但答案似乎是“否”:我必须按照 Redux 约定重新实现它。
    猜你喜欢
    • 2017-08-20
    • 2017-03-03
    • 1970-01-01
    • 2016-12-08
    • 2018-07-21
    • 2023-01-21
    • 2018-07-24
    • 1970-01-01
    • 2022-11-26
    相关资源
    最近更新 更多