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

IT技术 reactjs
2021-03-24 00:18:31

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

let dynamicPropName = "someString";

<MyComponent dynamicPropName="some value" />

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

3个回答

如果您使用的是es6,则可以定义动态props:

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

或者

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

然后使用扩展运算符:

<MyComponent {...dynamicProps} />

在 MyComponent 内部 -

let props = {...this.props};

现在您可以使用Object.keysonprops来获取所有动态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>

@saawsann 我添加了一个例子来说明。
2021-05-24 00:18:31
你能用演示(jsFiddle)开发这个答案吗?
2021-05-25 00:18:31
不是很重要的问题,因为我从你的问题中学到了我需要的东西,但这是let props = ...this.props为了什么?我有SyntaxError: Unexpected token ...
2021-05-31 00:18:31
在组件内部时,如何拾取动态道具 - this.props[someVariable]
2021-06-02 00:18:31
您可以通过个人道具名称访问,例如 this.props.somveVariable
2021-06-16 00:18:31

可以单独使用 JSX 语法使用spread 属性计算属性名称来做到这一点

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

内联方式(非常丑陋且不推荐)使用表达式来定义object

<input {...(el.required ? {required: true} : {})}>
你的例子是人为的,因为它通常只是required={el.required},但对于实际用例,我已经多次使用它,而不仅仅是 React。
2021-06-12 00:18:31