React での「...」(ドット3つ)の記法

React では以下のような「...」(ドット3つ)の記法を時々見かけます.

render() {
  return <Counter {...this.state} />
}

Spread Attributes

これは,Spread Attributes という JSX の記法です.

facebook.github.io

子の Component へ props を渡す場合,Spread Attributes を用いると,以下のように書き換えられます.

1つずつ渡す場合

const props = { foo: "foo", bar: "bar" };
render() {
  return <Child foo={props.foo} bar={props.bar} />
}

Spread Attributes を用いて渡す場合

const props = { foo: "foo", bar: "bar" };
render() {
  return <Child {...props} />
}

ES.next でのスプレッド演算子

「...」(ドット3つ)の記法は,スプレッド演算子として ES2015 で Array に導入されています.

let ary1 = ["first", "second"];
let ary2 = [...ary1, "third"]; // ["first", "second", "third"]

ES.next では,「...」(ドット3つ)の記法を,Object で使える Object Rest/Spread Properties が提案されています.

let obj1 = { x: 1, y: 2 };
let obj2 = { ...obj1, z: 3 }; // { x: 1, y: 2, z: 3 }

これを用いると,以下のような Object.assign() を用いていたコードが簡潔に書けるようになります.

let obj1 = { x: 1, y: 2 };
let obj2 = Object.assign({}, obj1, { z: 3 });

babel で用いる場合は,Stage 2 presetObject rest spread transform を用いてください.