这是 Flux 架构吗?

Is this Flux architecture?

这就是我组织我的 React / Redux 项目的方式,因为在我遵循的教程中他们就是这样做的。这就是 Flux 架构吗?如果不是,你会怎么称呼它?

这是一个例子:

组件

class List extends React.Component {
  componentDidMount() {
    this.props.getPosts();
  }
  // etc...
}

const mapStateToProps = state => {
  return {
    posts: state.posts
  };
};

const mapDispatchToProps = dispatch => {
  return {
    getPosts: () => dispatch(actions.getPosts())
  };
};

export default connect(mapStateToProps, mapDispatchToProps)(List);

动作

const postsLoaded = posts => {
  return {
    type: actionTypes.POSTS_LOADED,
    posts: posts
  };
};

export const getPosts = () => {
  return dispatch => {
    axios
      .get('http://api.something.com/posts', {})
      .then(response => {
        dispatch(postsLoaded(response.posts));
      })
      .catch(e => {
        console.error(e);
      });
  };
};

减速机

const setPosts = (prevState, action) => {
  return {
    ...prevState,
    ...action.posts
  };
};

const reducer = (prevState = {}, action) => {
  switch (action.type) {
    case actionTypes.POSTS_LOADED:
      return setPosts(prevState, action);
    default:
      return prevState;
  }
};

export default reducer;

Flux 是一种设计模式。 Redux 是 实现 Flux 的几个库之一。目的不是让你"use Redux to implement Flux",而是"use the Flux pattern by using Redux"。

您可以在下面的文档中找到更好的描述,但简单来说,Flux 架构基于单向数据流,这意味着每个部分从一个地方接收数据,并将更改输出到另一个地方。此模式的目的是消除 "spaghetti code",其中应用程序的各个部分在许多不同的方向上传递数据,最终会变得非常难以追踪。

换句话说,你的组件就是下图中的"View"。

  • Redux 存储为您的组件提供状态
  • 您的组件呈现某些内容,当用户执行操作时,组件会创建一个操作并将其提供给调度程序。
  • dispatcher 找到可以处理你的 action 的 reducer,并将结果交给 store。

然后循环重复。

可以在 here.

中找到这张图片和对 Flux 的深入概述