反应通量动作并存储类依赖项

Posted

技术标签:

【中文标题】反应通量动作并存储类依赖项【英文标题】:react flux actions and store class dependecies 【发布时间】:2016-04-22 18:31:22 【问题描述】:

据我了解React-Flux 架构,Flux Actions 类应该通过AppDispatcher 将它们的事件传播到Store 类。

但是,我看到一些示例是 Action 类直接从 Store 类获取数据以执行某些操作...

示例:

import ... /* a few more imports */
import AppDispatcher from 'AppDispatcher.js';
import SomeStore from 'SomeStore.js';


class SomeActions 

    processItemData()
        var item = SomeStore.getCurrentItem();
        .
        .
        // do something with the item
        .
        .
        // then data dispatched (anyway) to SomeStore or maybe other Store class
        AppDispatcher.dispatch(...); 
    

正如我所见 - 在此处导入 SomeStore.js 会破坏 Flux 架构和数据在应用中流动的方式。

问题是,这正常吗?这不是不好的做法吗?

【问题讨论】:

我不确定是否有一个正确的答案,但我肯定会考虑从组件传递数据,它会启动操作并从组件内的存储中获取数据,而不是导入存储在动作中,从而坚持 Flux 流:facebook.github.io/react/blog/2014/07/30/… 【参考方案1】:

您认为这是不正确的,并且打破了单向数据流的概念。该操作可以处理组件提供给它的数据,但我不明白为什么它需要或应该需要来自商店的任何数据或知识。

这违反了inversion of control 的原则,因为该操作需要了解 store 的自定义实现,而不是简单地调度带有数据的事件 - 这是 Flux 试图避免的那种架构!

【讨论】:

以上是关于反应通量动作并存储类依赖项的主要内容,如果未能解决你的问题,请参考以下文章

反应通量拦截器实现

通量 + 数据生命周期

没有动作和调度程序的通量?

通量存储数据指针与依赖项

如何为 RelayMutations 触发 Flux 动作

在常量对象中定义所有通量动作类型是一种常见的做法吗?