一、在一個React組件裏看到一個奇怪的寫法:javascript
const {matchs} = this.props.matchs;
原來,是解構賦值,雖然據說過,可是看起來有點奇怪java
下面作個實驗:react
<script type="text/javascript"> var props = { key1: 123 + "", key2: 456, key3: 789 } const { key1 } = props console.log(key1, typeof (key1)) </script>
原來能夠減小很多代碼量es6
二、以下npm
npm install graphql-tag --save import gql from 'graphql-tag'; import { Query } from 'react-apollo'; const GET_DOGS = gql` { dogs { id breed } } `; const Dogs = ({ onDogSelected }) => ( <Query query={GET_DOGS}> {({ loading, error, data }) => { if (loading) return 'Loading...'; if (error) return `Error! ${error.message}`; return ( <select name="dog" onChange={onDogSelected}> {data.dogs.map(dog => ( <option key={dog.id} value={dog.breed}> {dog.breed} </option> ))} </select> ); }} </Query> );
很明顯,return裏這個箭頭函數的參數將是傳入一個對象, 而且極可能不止3個屬性,所以進行結構賦值以取屬性來用。只有當函數的參數是一個對象時,變量segmentfault
loading, error, data
纔會經過解構賦值生成。若是函數調用時沒提供參數,變量函數
loading, error, data
就不會生成,並報錯。this
爲何gal後面跟一個字符串?spa
原來是模板字符串的功能:它能夠緊跟在一個函數名後面,該函數將被調用來處理這個模板字符串。這被稱爲「標籤模板」功能(tagged template)code
alert`123` // 等同於 alert(123)
參考:http://es6.ruanyifeng.com/#docs/string
三、
@withHeader export default class Demo extends Component { render() { return ( <div> 我是一個普通組件 </div> ); } }
在這裏使用了ES7
裏的decorator
,來提高寫法上的優雅,可是實際上它只是一個語法糖,下面這種寫法也是能夠的:
const EnhanceDemo = withHeader(Demo);
參考:https://segmentfault.com/a/1190000010371752