javascript - 这段 ES6 代码做了什么?

标签 javascript ecmascript-6 redux

我正在查看源代码附带的 redux todomvc 示例,其中有一些我以前从未见过的 JavaScript 符号。我熟悉 ES6 export 语法,但不明白这段代码末尾的 export 语句在做什么。为什么 App 类与 connect 函数的结果相结合?

import React, { Component, PropTypes } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import Header from '../components/Header'
import MainSection from '../components/MainSection'
import * as TodoActions from '../actions'

class App extends Component {
  render() {
    const { todos, actions } = this.props
    return (
      <div>
        <Header addTodo={actions.addTodo} />
        <MainSection todos={todos} actions={actions} />
      </div>
    )
  }
}

function mapStateToProps(state) {
  return {
    todos: state.todos
  }
}

function mapDispatchToProps(dispatch) {
  return {
    actions: bindActionCreators(TodoActions, dispatch)
  }
}

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(App)

最佳答案

它是两个链式函数调用。 connect(mapStateToProps, mapDispatchToProps) 被调用,它返回一个新的函数值。第二个函数值使用单个参数 App 调用。

使用中间变量可能有助于阐明正在发生的事情:

let connectRet  = connect(mapStateToProps, mapDispatchToProps),
    exportedVal = connectRet(App);

export default exportedVal;

关于javascript - 这段 ES6 代码做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561613/

相关文章:

javascript - 从另一个 jsx 文件导入所有函数和常量

javascript - 为什么继承Array在ES5中很难实现?

javascript - 在 React 中,如何在多个选择下拉菜单之间更新状态,每个下拉菜单都有相同的选项?

javascript - 如何在 ReactJS + Redux 中检查数组中的每个对象?

javascript - Angular/ ionic : update view with ng-repeat binds to an array

javascript - Ajax 整个页面 - 只显示一个 div 并保留 CSS 和其他标题 Material ?

javascript - arguments 对象在 ES6 中应该是可迭代的吗?

javascript - 为什么我的网页在应用 CSS 样式之前呈现原始 html - 既通过 Visual Studio Code 和 Firefox 在本地也托管在 github 上?

Javascript:完成DOM操作时的事件

javascript - 我应该如何传递我的 Prop 以获得有效的 Array[Object]