2016-12-30 78 views
0
class Example extends React.Component { 
    constructor() { 
     super(); 
     this.isChecked = this.isChecked.bind(this); 
    } 

    isChecked(ex){ 
     return this.props.defaults && $.inArray(ex, this.props.defaults); 
    } 

    render() { 
     return (
      <div className="example"> 
      {this.props.items.map(item => (
        var checked = this.isChecked({item.type}); 

        <span key={item.type}> 
         <input type="checkbox" {checked ? 'checked' : ''} name="example" value={item.type} id={item.type} /> 
         <label htmlFor={item.type}>{item.display}</label> 
        </span> 
      ))} 
      </div> 
     ); 
     } 
} 

基於可變在上述例子中有條件地設置複選框的狀態,我已通過的項目的列表的部件this.props.items和默認值this.props.defaults的列表。對於每個項目,如果項目在默認列表中,我希望其狀態爲checked。留下整體設計相同,我該怎麼做? (注:我意識到我可以重新設計應用程序以避免在地圖中聲明變量的問題,這不是問題)。在ReactJS

上面的代碼不工作(顯然),我只是想給大家一個想法,我在這裏嘗試。如果你運行這個錯誤,那麼在聲明「var」的地方就會出現類似「意外標記」的錯誤。

回答

1

render方法有一些語法錯誤,這應該工作:

render() { 
    return (
     <div className="example"> 
     {this.props.items.map((item) => { 
       var checked = this.isChecked(item.type); 
            return (
        <span key={item.type}> 
         <input type="checkbox" checked={checked ? 'checked' : ''} name="example" value={item.type} id={item.type} /> 
         <label htmlFor={item.type}>{item.display}</label> 
        </span> 
       ) 
     })} 
     </div> 
    ); 
    } 

這主要失誤被宣佈在地圖的功能,你必須在括號來包裝項目,用方括號括而不是括號的功能。如果胖箭頭功能只有一條語句,則不需要指定return。但是在這種情況下,您添加了var checked行,因此您現在必須明確地將另一行設爲return聲明。在輸入中如何設置checked也存在問題。希望有所幫助!

+0

感謝您的意見。我設置的原因是我檢查過的方式是因爲在HTML中單詞「checked」的存在表示應該檢查盒子;價值並不重要。那是不正確的?但我確實認爲我必須使用危險的SetInnerHtml方法按照我嘗試的方式來執行操作。順便說一下,建議非常感謝。 – KyleM

+0

哦,我明白你爲什麼試圖吐出檢查,但是在這種情況下,這不是有效的jsx語法。 React處理你的優化,你不會在DOM中看到「checked = true」。 –

+0

謝謝你,你的解決方案工作。還有其他一些小錯誤,例如,key = {item.type}應該是key = {item.type + checked},這樣如果默認選中的項目發生更改,reactJS將重新呈現列表。顯然,你無法知道,因爲它是我的實現特定的。非常感謝你的幫助! – KyleM