React-Redux-Firebase 文档中不寻常的 json 语法。有效吗?

Unusual json syntax in React-Redux-Firebase documentation. Is it valid?

The documentation to React-Redux-Firebase provides the following sample code.

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 }

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

这是新的 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

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

{ path: 'todos', populates }

基本上,这转化为,

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

注意,populates是一个正在使用的变量,把变量名写在object中,把name当作key,value随便什么,变量就持有。