如果你事先知道組件需要的全部 Props(屬性),JSX 很容易地這樣寫:
~~~
var component = <Component foo={x} bar={y} />;
~~~
## 修改 Props 是不好的,明白嗎
如果你不知道要設置哪些 Props,那么現在最好不要設置它:
~~~
var component = <Component />;
component.props.foo = x; // 不好
component.props.bar = y; // 同樣不好
~~~
這樣是反模式,因為 React 不能幫你檢查屬性類型(propTypes)。這樣即使你的 屬性類型有錯誤也不能得到清晰的錯誤提示。
Props 應該被當作禁止修改的。修改 props 對象可能會導致預料之外的結果,所以最好不要去修改 props 對象。
## 延展屬性(Spread Attributes)
現在你可以使用 JSX 的新特性 - 延展屬性:
~~~
var props = {};
props.foo = x;
props.bar = y;
var component = <Component {...props} />;
~~~
傳入對象的屬性會被復制到組件內。
它能被多次使用,也可以和其它屬性一起用。注意順序很重要,后面的會覆蓋掉前面的。
~~~
var props = { foo: 'default' };
var component = <Component {...props} foo={'override'} />;
console.log(component.props.foo); // 'override'
~~~
## 這個奇怪的?`...`?標記是什么?
這個?`...`?操作符(也被叫做延展操作符 - spread operator)已經被?[ES6 數組](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)?支持。相關的還有 ES7 規范草案中的?[Object 剩余和延展屬性(Rest and Spread Properties)](https://github.com/sebmarkbage/ecmascript-rest-spread)。我們利用了這些還在制定中標準中已經被支持的特性來使 JSX 擁有更優雅的語法。