2017-04-03 10 views
0

私はリアクションチュートリアルに従っています。少し説明が必要です。 App.jsコンポーネントのレンダリング機能では、広がり演算子は、コンテスト配列のマッピングによって公開されたコンテストオブジェクトで使用されます。 ContestPreview.jsコンポーネントはプロパティを名前なしでプロップとしてどのように使用できるのですか。この場合、スプレッド演算子はなぜ使用されていますか?スプレッドまたはレストオペレータの明確化ES6

ありがとうございました。

App.js

import React from 'react'; 
import Header from './Header'; 
import ContestPreview from './ContestPreview'; 
import data from '../testData'; 

class App extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     pageHeader: 'Naming Contests', 
     contests: [] 
    }; 
    } 

    componentDidMount() { 
    this.setState({ 
     contests: data.contests 
    }); 
    } 

    render() { 
    return (
     <div className='App'> 
     <Header message={this.state.pageHeader} /> 
     <div> 
      {this.state.contests.map(contest => 
      <ContestPreview key={contest.id} {...contest} 
      /> 
     )}; 
     </div> 
     </div> 
    ); 
    } 
} 

export default App; 

ContestPreview.js

<div {...props} /> 

の文脈では

import React from 'react'; 

const ContestPreview = (contest) => (
    <div className='ContestPreview'> 
    <div className='category-name'> 
     {contest.categoryName} 
    </div> 
    <div className='contest-name'> 
     {contest.contestName} 
    </div> 
    </div> 
); 

export default ContestPreview; 
+0

これらのオブジェクトのプロパティを広めているので便利な方法です。あなたは "休憩"オペレータの意味は? – ZekeDroid

+0

@ZekeDroidこの例では、 "rest"はありませんが、 'const [a、b、... others] = [1,2,3,4,5,6];' – loganfsmyth

+0

'...'は演算子ではないので、[* punctuator *](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-punctuators)と[ * rest *](http://www.ecma-international.org/ecma-262/7.0/index.html#prod-AssignmentRestElement)および[* spread *](http://www.ecma-international.org/ ecma-262/7.0/index.html#prod-SpreadElement)の構文を使用します。 MDN [* Rest parameters *](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/rest_parameters)と[* Spread syntax *](https://developer.mozillaを参照してください。 org/ja/docs/Web/JavaScript/Reference/Operators/Spread_operator)。 – RobG

答えて

2

広がり構文(...)ここでは、具体的JSXあり、それは独自のを持っています通常のES6の普及ではなく、提案されたオブジェクトの普及もないため、JSX定義の動作。

The JSX spread syntaxは、指定されたオブジェクトのすべてのプロパティをとり、propsの一部として子コンポーネントに渡します。