2017-04-11 51 views
1

無法呈現這段代碼,得到語法錯誤:[標準輸入]:4:1:意外壓痕發生反應,使DIV到L1標籤

@Statement = React.createClass 
    render: -> 
    React.DOM.li 
     React.DOM.div 
     className: 'statement' 
     @props.statement.body 

如果我註釋掉該行號,一切正常精細。

爲什麼發生了?我什麼都不明白...

回答

1

代碼不會編譯,因爲您試圖將作爲唯一參數傳遞給React.DOM.li的唯一參數,而它首先需要一個選項對象,然後是子對象。

@Statement = React.createClass 
    render: -> 
    React.DOM.li {}, 
     React.DOM.div 
     className: 'statement' 
     @props.statement.body 

您需要將空散列傳遞給li元素。您可以通過null而不是{},它們都將被React視爲空的options/attr對象。

此外,您還可以使用解構賦值從CoffeeScript中做出反應的代碼看起來更乾淨:

{li, div} = React.DOM 

@Statement = React.createClass 
    render: -> 
    li {}, 
     div 
     className: 'statement' 
     @props.statement.body 

爲數不多的基團與CoffeeScript的工作,並沒有JSX陣營都Arkency,看看their resources獲取更多提示。


編輯:關於您的評論:

這可能是缺口的情況下 - CoffeeScript的隱式返回最後一個表達式的結果在一個函數或塊。

如果你想渲染嵌套在第一第二跨度:

render: -> 
    React.DOM.span null, 
    '123' 
    React.DOM.span null, 
     'sdfdfg' 

如果你正在尋找呈現兩個兄弟姐妹,你將需要包裝起來的父元素,你可以只返回作出反應的方式呈現一個組件:

render: -> 
    React.DOM.div null, 
    React.DOM.span null, 
     '123' 
    React.DOM.span null, 
     'sdfdfg' 
+0

THX) 可能u能解釋我爲什麼在這種情況下呈現只剩下最後跨度? '渲染 - > React.DOM.span空, '123' React.DOM.span空, 「sdfdfg'' – nuT707

+1

@ nuT707我添加了一個編輯答案關於你的評論。如果這不是正確的答案,請發佈一個新的問題,並附上正確的縮進,因爲這對於React和Coffeescript都非常重要 –