非常教程

Redux参考手册

方法 | Recipes

隔离Redux子应用程序( Isolating Redux Sub-Apps )

考虑<BigApp>嵌入较小的“子应用程序”(包含在<SubApp>组件中)的“大”应用程序(包含在组件中)的情况:

import React, { Component } from 'react'
import SubApp from './subapp'

class BigApp extends Component {
  render() {
    return (
      <div>
        <SubApp />
        <SubApp />
        <SubApp />
      </div>
    )
  }
}

这些<SubApp>将完全独立。他们不会共享数据或行为,也不会看到或彼此沟通。

最好不要将此方法与标准 Redux 还原剂组合物混合。对于典型的 Web 应用程序,坚持减速器组成。对于将不同工具分组为统一软件包的“产品中心”,“仪表板”或企业软件,请尝试使用子应用程序方法。

子应用程序方法对于按产品或功能垂直划分的大型团队也很有用。这些团队可以独立运送子应用程序,或与封闭的“应用程序外壳”结合使用。

下面是一个子应用程序的根连接组件。像往常一样,它可以呈现更多的组件,连接与否,作为孩子。通常我们会在<Provider>渲染它并完成它。

class App extends Component { ... }
export default connect(mapStateToProps)(App)

但是,如果我们有兴趣隐藏子应用程序组件是Redux应用程序的事实,则不必调用ReactDOM.render(<Provider><App/> </Provider>)。

也许我们希望能够在同一个“更大”的应用程序中运行它的多个实例,并将它保存为一个完整的黑盒子,其中 Redux 是一个实现细节。

要将 Reux 隐藏在 React API 的后面,我们可以将它包装在一个特殊的组件中,该组件可以在构造函数中初始化商店:

import React, { Component } from 'react'
import { Provider } from 'react-redux'
import { createStore } from 'redux'
import reducer from './reducers'
import App from './App'

class SubApp extends Component {
  constructor(props) {
    super(props)
    this.store = createStore(reducer)
  }

  render() {
    return (
      <Provider store={this.store}>
        <App />
      </Provider>
    )
  }
}

这样每个实例都将是独立的。

这种模式推荐用于共享数据的同一应用程序的某些部分。然而,当更大的应用程序对内部小应用程序的访问权限为零时,它可能很有用,并且我们希望将它们作为实现细节与 Redux 一起实现。每个组件实例都有自己的商店,所以他们不会“彼此了解”。

Redux

Redux由Dan Abramov在2015年创建的科技术语。是受2014年Facebook的Flux架构以及函数式编程语言Elm启发。很快,Redux因其简单易学体积小在短时间内成为最热门的前端架构。

主页 http://redux.js.org/
源码 https://github.com/reactjs/redux/
发布版本 3.7.2

Redux目录

1.高级 | Advanced
2.API
3.基础 | Basics
4.FAQ
5.介绍 | Introduction
6.其他 | Miscellaneous
7.方法 | Recipes