2016-11-29 33 views
4

是否可以動態創建道具的名稱?例如:如何在React中創建動態的道具名稱?

let dynamicPropName = "someString"; 

<MyComponent dynamicPropName="some value" /> 

這樣在MyComponent中就存在this.props.someString。

+0

當然,前提'MyComponet'知道如何處理它。否則它是沒用的。 –

+0

那麼解決方案是什麼? – JoeTidee

回答

10

如果您正在使用ES6,您可以定義動態道具:

let dynamicProps = {"dynamicKey":"someString", "dynamicKey2":"someString"}; 

let someVariable = "xyz"; 
dynamicProps[someVariable] = value; 

然後使用蔓延運營商:

<MyComponent {...dynamicProps} /> 

內MyComponent的 -

let props = ...this.props; 

現在,您可以使用Object.keys上的props來獲取所有動態屬性名稱。

編輯: 添加了一個例子

class Test extends React.Component { 
 
    
 
    renderFromProps() { 
 
    return Object.keys(this.props) 
 
    .map((propKey) => 
 
     <h3>{this.props[propKey]}</h3> 
 
    ); 
 
    } 
 
    render() { 
 
    return (
 
    <div> 
 
     <h1>One way </h1> 
 
     <hr/> 
 
     <h3>{this.props.name}</h3> 
 
     <h3>{this.props.type}</h3> 
 
     <h3>{this.props.value}</h3> 
 
     <hr/> 
 
    <h1> Another way </h1> 
 
     <hr/> 
 
     { this.renderFromProps()} 
 
    </div> 
 
    ); 
 
    } 
 
    
 
} 
 

 
const dynamicProps = { name:"Test", type:"String", value:"Hi" }; 
 

 
ReactDOM.render(
 
    <Test {...dynamicProps} />, 
 
    document.getElementById('root') 
 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="root"> 
 
</div>

+0

當組件內部時,我如何獲取動態道具 - '''this.props [someVariable]'''? – JoeTidee

+0

您可以通過個人道具名稱進行訪問,例如'this.props.somveVariable' – WitVault

+0

您可以使用演示(jsFiddle)開發此答案嗎? – saawsann