2016-11-29 47 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