2016-03-24 53 views
48

我需要一個動態類添加到常規類的列表,但不知道如何(我用巴貝爾),像這樣:ReactJS添加動態類手工課名

<div className="wrapper searchDiv {this.state.something}"> 
... 
</div> 

任何想法?

感謝

+0

爲reactjs在[鏈接]造型的最佳實踐(https://stackoverflow.com/questions/26882177/react-js-inline-style-best-practices/31638988#31638988) –

回答

86

你可以做到這一點,正常的javascript:

className={'wrapper searchDiv ' + this.state.something}

或字符串模板版本

className={`wrapper searchDiv ${this.state.something}`}與反引號。

這兩種類型當然只是JavaScript,但第一種模式是傳統的類型。無論如何,在JSX中,所有以大括號括起來的東西都是以javascript的形式執行的,所以基本上可以做任何你想做的事情。但是結合JSX字符串花括號是屬性的禁用功能。

+0

和什麼有用的答案多個班的情況? –

+0

兩者都不起作用 – TeodorKolev

23

取決於您項目增長時需要添加多少個動態類,可能值得在GitHub上檢查JedWatson的classnames實用程序。它允許您將條件類表示爲對象,並返回那些評估爲true的對象。

所以從它的陣營文檔的例子:

render() { 

var btnClass = classNames({ 
    'btn': true, 
    'btn-pressed': this.state.isPressed, 
    'btn-over': !this.state.isPressed && this.state.isHovered 
}); 

return <button className={btnClass}>I'm a button!</button>; 

} 

由於陣營觸發重新繪製時,有一個狀態變化,動態類的名字自然處理,並及時更新與狀態你的組件。

+1

對於這樣簡單的事情,使用classNames是一種矯枉過正。避免使用它並選擇dannyjolie的簡單答案 – checklist

0

您可以使用this npm軟件包。它處理所有事情,並且可以根據變量或函數選擇靜態和動態類。

// Support for string arguments 
getClassNames('class1', 'class2'); 

// support for Object 
getClassNames({class1: true, class2 : false}); 

// support for all type of data 
getClassNames('class1', 'class2', ['class3', 'class4'], { 
    class5 : function() { return false; }, 
    class6 : function() { return true; } 
}); 

<div className={getClassNames({class1: true, class2 : false})} />