2016-06-07 27 views
4

如果您知道該鍵,則在React中設置屬性非常簡單。在React中動態設置屬性鍵(例如data- {foo} =「bar」)

data-500={this.props.YDistance}

但如何能一個動態設置鍵的一部分。例如

data-{this.props.YDistance}="valueHere"

var Test = React.createClass({ 

    render: function() { 
     return (
      <div data-{this.props.YDistance}="valueHere"> 
       {this.props.children} 
      </div> 
     ); 
    } 

}); 

ReactDOM.render(
    <Test YDistance="500">Hello World!</Test>, 
    document.getElementById('container') 
); 

存在需要這種屬性的設置

回答

8

你可以使用一個對象來存儲動態屬性,然後使用JSX傳播屬性庫(例如skrollr等)。

https://facebook.github.io/react/docs/jsx-spread.html

const propBag = { [`data-${foo}`] = 'bar' }; 
return (
    <div {...propBag}> 
    {this.props.children} 
    </div> 
); 

即使用ES6的computed properties特徵以及template literal strings。如果你不使用ES6功能,你可以這樣做ES5的實現:

var propBag = {}; 
propBag['data-' + foo] = 'bar'; 
return (
    <div {...propBag}> 
    {this.props.children} 
    </div> 
); 
+0

這可以進一步簡化與[計算鍵] [http://www.ecma-international.org/ecma-262/ 6.0 /#sec-object-initializer):'

...
'。 – Kujira

+0

謝謝@ ctrlplusb - 偉大的解決方案!小編輯...應該讀第一行'const propBag = {['data - $ {foo}']:'bar'};'? –

+0

沒問題。 :)這不是一個錯字沒有。看看我在代碼示例下提供的鏈接。這是一些神奇的ES6語法正在使用。別擔心,這不是太神奇,如果你通過幾個例子,你會很快掌握它們。 :) – ctrlplusb

相關問題