Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Redux是单向的吗?_Reactjs_Flux_Redux - Fatal编程技术网

Reactjs Redux是单向的吗?

Reactjs Redux是单向的吗?,reactjs,flux,redux,Reactjs,Flux,Redux,在实现了Flux之后,很容易看出它实际上是单向的 Flux recap:视图接收用户操作,这些操作被发送到操作创建者并由其解释,这些操作被发送到调度程序,这些操作被广播到存储,最终触发视图中的更新 对于Redux,虽然我只读过几篇关于它的博客文章,但看起来动作创建者实际上是在将格式化的动作对象返回到最初触发动作的视图 见: 所以问题是:让动作创建者通过设计返回到视图会破坏单向工作流的概念吗 我还没有实现Redux,所以可能我遗漏了一个步骤,但这对我来说是Flux和Redux之间的一个巨大区别。F

在实现了Flux之后,很容易看出它实际上是单向的

Flux recap:视图接收用户操作,这些操作被发送到操作创建者并由其解释,这些操作被发送到调度程序,这些操作被广播到存储,最终触发视图中的更新

对于Redux,虽然我只读过几篇关于它的博客文章,但看起来动作创建者实际上是在将格式化的动作对象返回到最初触发动作的视图

见:

所以问题是:让动作创建者通过设计返回到视图会破坏单向工作流的概念吗


我还没有实现Redux,所以可能我遗漏了一个步骤,但这对我来说是Flux和Redux之间的一个巨大区别。

Flux和Redux中的数据流几乎相同,只是没有调度程序和回调,因为操作在存储上运行。(与之比较。)

Redux文档包括:

Redux体系结构围绕严格的单向数据 流量

这意味着应用程序中的所有数据都遵循相同的生命周期 模式,使应用程序的逻辑更可预测,更易于操作 明白。它还鼓励数据规范化,这样您就不会 最终得到相同数据的多个独立副本 彼此不认识

如果你仍然不相信,读一读 动机和 这是一个支持单向数据流的有力论据。 尽管如此 共享相同的关键好处

任何Redux应用程序中的数据生命周期都遵循以下4个步骤:

  • 您可以调用
    store.dispatch(action)
  • Redux存储调用您提供的reducer函数
  • 根减速器可以将多个减速器的输出合并到一个状态树中
  • Redux存储保存根还原程序返回的完整状态树

  • 我认为你过于强调动作创造者是什么

    动作创建者实际上就是这样:

    function login(username, password) {
      return { type: 'LOGIN', payload: { username, password };
    }
    
    这两件事是相同的:

    class Component extends React.Component {
      ...
      render() {
        const { username, password } = this.props;
    
        return (
          ...
            dispatch({ type: 'LOGIN', payload: { username, password });
            // or
            dispatch(login(username, password));
          ...
        );
      }
    }
    
    然后,如果您使用用户
    react redux
    connect
    ,它可能看起来像

    class Component extends React.Component {
      ...
      render() {
        const { username, password } = this.props;
    
        return (
          ...
            login(username, password)); // connect binds the AC to dispatch for convenience.
          ...
        );
      }
    }
    
    动作创造者不是一个大的抽象概念。它们只是一个函数的特殊名称,有助于使操作保持代码干燥。他们没有做任何事情来改变单向模型

    通过设计让动作创建者返回视图是否会破坏单向工作流的概念

    TLDR: redux中的操作创建者返回操作,而不调用dispatch。对的 这会破坏单向工作流吗?没有

    从action creator接收操作后,可以通过调用dispatch()函数将其转发到存储,并将返回的操作作为参数。因此,数据流仍然是单向的

    细节: 1. 在传统的Flux实现中,动作创建者通常在调用时触发分派,如下所示:

    function addTodoWithDispatch(text) {
      const action = {
        type: ADD_TODO,
        text
      }
      dispatch(action)
    }
    
    相反,在Redux操作中,创建者是纯功能,没有副作用。它们只返回一个动作:

    function addTodo(text) {
      return {
        type: ADD_TODO,
        text
      }
    }
    
    这使它们更便于携带和测试。要实际启动分派,请将结果传递给dispatch()函数:

    dispatch(addTodo(text))
    dispatch(completeTodo(index))
    

    2. 如中所示

  • 视图请求一个操作。action creator将其格式化并返回

  • 该操作要么自动分派(如果安装程序中使用了bindActionCreators()),要么视图分派该操作

  • 商店收到该操作


  • 因此,数据流仍然是单向的。

    这正是我的观点。在Flux中,ActionCreator调用dispatcher,而不是将action对象返回到触发它的视图。这样可以很容易地看到单向工作流。现在,Redux正在将action对象返回到视图,并将其分派到存储区。仅仅是它返回到视图这一事实就似乎打乱了单向的工作流程。你有权发表你的意见,但不会期望找到许多同意你的人。flux上最初的FB规范说动作创建者返回已调度的动作。这正是redux正在做的。如果这不是单向的,那么通量就不是无向的。如果您对这种方式感到不舒服,
    react redux
    提供了
    connect
    ,允许您将动作创建者与
    dispatch
    绑定,以节省语法。我不认为这对它是否是单向的有任何实质性的影响。