1

React-Redux-Firebase 的文档提供了以下示例代码。

import { compose } from 'redux'
import { connect } from 'react-redux'
import { firebaseConnect, populate } from 'react-redux-firebase'

const populates = [
  { child: 'owner', root: 'users' } // replace owner with user object
]

const enhance = compose(
  firebaseConnect([
    // passing populates parameter also creates all necessary child queries
    { path: 'todos', populates }
  ]),
  connect(({ firebase }) => ({
    // populate original from data within separate paths redux
    todos: populate(firebase, 'todos', populates),
    // firebase.ordered.todos or firebase.data.todos for unpopulated todos
  }))
)

export default enhance(SomeComponent)

我特别担心这样一行:

{ path: 'todos', populates }

我以前从未见过这种语法。这是一个错误吗?或者它是有效的语法?如果它是有效的,请解释它的含义和它是如何工作的。

4

2 回答 2

1

这是新的 ES6 语法。基本上如果populates'abc'(仅作为一个例子),那么

{ path: 'todos', populates }

方法

{ path: 'todos', populates: 'abc' }

但是,populates可以是任何可以在对象内部使用的有效值。

因此,在您的特定情况下,它将转化为:

{
 path: 'todos',
 populates: [{
  child: 'owner',
  root: 'users'
 }]
}

参考:https ://ariya.io/2013/02/es6-and-object-literal-property-value-shorthand

于 2018-10-08T04:11:19.843 回答
1

是的,这是 es6 中的有效语法

{ path: 'todos', populates }

这基本上,转化为,

{ 
   path: 'todos',
   populates:  [
     { child: 'owner', root: 'users' }
   ]
}

请注意,populates是一个正在使用的变量,并且在对象中写入变量名称,将名称视为键,并将值视为变量所持有的任何内容。

于 2018-10-08T04:13:10.877 回答