2017-01-25 22 views
3

私はRedux、React、ES6を学んでいます。私はすでにJSで開発しましたが、この新しいES6の世界は、矢印関数などを宣言するために、 "=>"のような新しいことがたくさんあります。しかし、この新しいRedux研究では、コードの途中で...に直面しています。「...」とはJavascript(ES6)の意味ですか?

ベロー私は例があります。

import { combineReducers, createStore } from 'redux' 

const userReducer = (state={}, action) => { 
    switch(action.type) { 
     case 'CHANGE_NAME': 
      state = {...state, name: action.payload}; 
      break; 
     case 'CHANGE_AGE': 
      state = {...state, age: action.payload}; 
      break; 
    } 
    return state; 
}; 

const tweetsReducer = (state=[], action) => { 
    return state; 
}; 

const reducers = combineReducers ({ 
    user: userReducer, 
    tweetsReducer: tweetsReducer, 
}); 


const store = createStore(reducers); 

store.subscribe(() => 
    console.log('The chage was: ', store.getState()) 
); 

store.dispatch({type: 'CHANGE_NAME', payload: 'Will'}) 
store.dispatch({type: 'CHANGE_AGE', payload: 21}); 

私は
state.name = action.payload;
state.age = action.payload;

state = {...state, name: action.payload};
state = {...state, age: action.payload};
を交換した場合、それは動作しますが、年齢が挿入されましたオブジェクト名と最初に名前が挿入され、年齢が挿入された後。

どうしてですか?今後のコードで...を使用するにはどうすればよいですか?それはまさに州に関係していますか?

+4

'...'はスプレッド演算子です。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator – hackerrdave

+0

ありがとうございます!私が尋ねたときに私は見つけられませんでした。だから、それは本当に重複しています。しかし、あなたの答えに感謝します。 – Aipi

+0

@hackerrdave:['... 'は演算子ではありません](https://stackoverflow.com/questions/37151966/what-is-spreadelement-in-ecmascript-documentation-is-it-the-same-as-普及/ 37152508#37152508)。 –

答えて

2

スプレッドオペレータと呼ばれています。

オブジェクトまたは配列の値を別のオブジェクトまたは配列にアンパックします。たとえば、アレイを用いた:

a1 = [1, 2, 3] 
a2 = [4, 5, 6] 
a12 = [...a1, ...a2] // [1, 2, 3, 4, 5, 6] 

同じセマンティクスをオブジェクトに適用されます。

o1 = { foo: 'bar' } 
o2 = { bar: 'baz' } 
o12 = { ...o1, ...o2 } // { foo: 'bar', bar: 'baz' } 

あなたは浅いコピーオブジェクトと配列にそれを使用することができます。

a = [1, 2, 3] 
aCopy = [...a] // [1, 2, 3], on a new array 

o = { foo: 'bar' } 
oCopy = { ...o } // { foo: 'bar' }, on a new object 

Mozilla docsをチェック、すべてのものjavascriptのための優れた情報源です。

+0

ありがとう!私が尋ねたときに私は見つけられませんでした。だから、それは本当に重複しています。しかし、あなたの答えに感謝します。 – Aipi

+0

普及している演算子は公式スペックの一部ですが、オブジェクトスプレッド構文はまだtc39プロセスの初期段階にあるため、実際にはIMOという2つの異なるものです。それが意味することは、この2つの非常に異なる振る舞いで、スプレッドオペレータは「アンパック」よりもはるかに多くのことです。 – adz5A

+1

['... 'は演算子ではありません](https://stackoverflow.com/questions/37151966/what-is-spreadelement-in-ecmascript-documentation-is-it-the-same-as-spread-oper/37152508#37152508)。 –

関連する問題