2015-01-31 2118 views
13

我在我的React應用程序中使用名爲react-forms的庫。爲了更好地理解它是如何工作的,我一直在閱讀代碼,但是會議不停地彈出來讓我困惑。這裏的ES6/JSX代碼:解釋ES6/JSX代碼中使用的問號(?)

'use strict'; 

var React = require('react/addons'); 
var cx = React.addons.classSet; 

var Checkbox = React.createClass({ 

    propTypes: { 
/...code.../ 
    }, 

    render(): ?ReactElement { 
    /...code.../ 
    }, 

    onChange(e: {target: {checked: boolean}}) { 
    /...code.../ 
    } 
}); 

module.exports = Checkbox; 

render(): ?ReactElement {}。這是令我困惑的部分。有人可以提供有關此語法的更多信息的指導嗎?我通過谷歌打了很多死衚衕。

+0

這不是ES6語法afaict。 – Bergi 2015-01-31 20:07:38

+0

@Bergi'渲染():'是香草JS語法? 'onChange()'以及?我認爲像'render:function(){...}'是需要的。 – Miles 2015-02-01 14:35:29

+1

不是,是的。當FakeRainBrigand回答時,':'和下面的聲明用於類型檢查。 'render(){...}'是一個ES6方法定義。 – Bergi 2015-02-01 14:41:57

回答

16

如果你去的反應,形式的package.json,並期待在browserify部分:

"browserify": { 
    "transform": [ 
     [ 
     "reactify", 
     { 
      "es6": true, 
      "target": "es5", 
      "stripTypes": true 
     } 
     ] 
    ] 
    }, 

stripTypes啓用。它去除諸如像?ReactElement,這意味着它maybe返回ReactElement(否則null或未定義)

{target: {checked: boolean}}裝置e具有目標屬性,它具有最好的特性,其是一個布爾值。

這些提示爲Flow type checker。您還會在應該鍵入檢查的所有文件頂部的註釋中看到@flow。類型檢查器是一種工具,就像單元測試一樣,它可以讓你更加確信程序的正確性,而且不需要手動測試。在許多情況下,這些小類型註釋取代了我們要寫的單元測試。

如果你在項目中使用流,並嘗試做一些事情,如:

<Checkbox /> 

因爲價值的onChange需要道具它會給你一個類型的錯誤。與運行時支持檢查不同,這不會實際運行代碼(通常只要保存文件)。