如何在React中创建动态道具名称?

时间:2016-11-29 14:20:49

标签: reactjs

是否可以动态创建道具的名称?例如:

let dynamicPropName = "someString";

<MyComponent dynamicPropName="some value" />

所以在MyComponent中,this.props.someString存在。

3 个答案:

答案 0 :(得分:33)

如果您使用 es6 ,则可以定义动态道具:

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

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

然后使用点差运算符:

<MyComponent {...dynamicProps} />

在MyComponent中 -

let props = ...this.props;

现在,您可以在Object.keys上使用props来获取所有动态道具名称。

修改 添加了一个示例

&#13;
&#13;
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')
);
&#13;
<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>
&#13;
&#13;
&#13;

答案 1 :(得分:11)

使用spread attributecomputed property name单独使用JSX语法可以做到这一点:

<MyComponent {...{ [dynamicPropName]: "some value" }} />

答案 2 :(得分:1)

一种内联方式(非常丑陋,不建议使用)使用表达式来定义object

<input {...(el.required ? {required: true} : {})}>