【问题标题】:Flux/ReactJS - One Store per API endpoint or One Store to all API endpoints?Flux/ReactJS - 每个 API 端点一个存储或一个存储到所有 API 端点?
【发布时间】:2016-01-01 15:13:18
【问题描述】:

我在规划我的 ReactJS/Flux 应用程序时遇到了一些困惑。它将连接到具有以下端点的 WP Api:

/api/stores/
/api/posts/
/api/settings/

从构建的角度来看,最好的方法是什么?我目前的想法是有以下几点:

API -> ActionCreator -> 商店 -> ActionCreator -> 视图

这意味着在某些情况下,每个视图将包含最多三个商店的更改侦听器,并且可能会出现大量重复代码。

另一种选择是许多商店都使用一个 actionCreator,但我不确定哪个最适合可扩展性。

有人可以帮忙吗?

【问题讨论】:

    标签: reactjs flux


    【解决方案1】:

    ActionCreator 不涉及商店和视图之间,只是在服务器/商店或视图/服务器之间

    API -> ActionCreator -> Store ---binding_eventChange---> View(s) --actionCreator-->request ...等

    对于我的 api,我为 api 的每个端点使用一个存储,这是一种数据。 一个视图确实会绑定到许多商店(3,4,5stores ...等),这就是为什么我将视图分成几个子视图,每个子视图都绑定到一种类型的数据/存储。 所以我有一个大的父视图,它可以渲染几个子视图,它允许简单的(子)视图易于阅读,它还使代码非常模块化,您可以轻松地组合子视图。

    编辑: 在您的评论示例中,您想要做的是: 1.加载您的视图 2.您的视图正在请求一种数据 3.您的商店收到询问的数据。 4.您的视图,绑定到商店,使用新数据进行更新。

    我会很快用伪代码写出来:

    1.在你看来:

    componentDidMount() {
       //calling your actioncreator to init the first call to the server
       ActionCreator.requestSomeTypeofData();
       // Set your store listener so your view can update when the data are here
       SomeTypeofDataStore.on('change', handler);
    }
    
    handler: function() {
        var data = SomeTypeofDataStore.getAll();
        this.setState({ data:data });
    }
    
    1. 在你的 actionCreator 中:

      actionCreator.requestSomeTypeofData = function() { MakeAjaxCall({ 成功:函数(数据){ Dispatcher.handleViewAction({ actionType:"SomeTypeofData", 结果:数据 }); }

      }

    2. Store:当 ajax 调用完成后,新数据被分派到 store

    基本上,您正在使用 Dispatcher.register 和一个开关来为您的商店选择正确的操作(我让您查看通量教程,但我想您已经知道了)。 当您注册新数据时,您还绑定了一个“更改”事件(请参阅教程以及他们如何使用 EventEmitter,这很容易)。 (此处示例:https://facebook.github.io/flux/docs/todo-list.html#creating-stores

    1. 您的视图收到更新事件,调用处理程序注册新状态并使用您的新数据重新呈现

    我希望它很清楚:)

    【讨论】:

    • 不过,actionCreator 将从视图中触发一个事件。例如,在我的代码中,我有以下内容: componentDidMount(){ StoreActionCreator.getDirectoryStores();它将视图中的事件发送到 actionCreator,后者又将其分派到商店。我假设根据您在那里设置的内容,ActionCreator 和 Dispatcher 充当单例,处理所有事件,然后将它们传递给商店,如果它们有匹配的注册操作,可能使用检查 actionType 的开关?
    • 我认为你说得对,我写的东西更详细,但我认为你明白了
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2019-02-22
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多