动态设置组件的道具

buk*_*ski 14 jsx reactjs react-jsx

我需要在组件存储在变量中之后设置它的道具,这里是伪代码:

render(){

    let items = [{title:'hello'}, {title:'world'}];
    let component = false;

    switch (id) {
      case 1:
        component = <A />
        break;
      case 2:
        component = <B />
        break;      
    }

    return(
      items.map((item, index)=>{
        return(
          <span>
            {/* SOMETHING LIKE THIS WOULD BE COOL - IS THAT EVEN POSSIBLE*/}
            {component.props.set('title', item.title)}
          </span>11

        )
      })
    )
  }
Run Code Online (Sandbox Code Playgroud)

在里面return我运行一个循环,我需要为存储在变量中的组件设置道具....如何设置我之前存储在变量中的组件的道具?

小智 35

正确的方法是使用React的cloneElement方法(https://facebook.github.io/react/docs/react-api.html#cloneelement).您可以通过以下方式实现您想要的目标:

<span>
  {
    React.cloneElement(
      component,
      {title: item.title}
    )
  }
</span>
Run Code Online (Sandbox Code Playgroud)

  • 有人知道如何在创建后从父级更新克隆元素道具吗? (3认同)

Mac*_*ora 6

可以通过分配组件引用而不是 jsx 来完成,然后在循环中使用 jsx 并使用变量中的组件。检查我的代码更改。

render(){

let items = [{title:'hello'}, {title:'world'}];
let C = null; //null is more accurate for object variable

switch (id) {
  case 1:
    C = A; //it is component reference, C must be from upper letter
    break;
  case 2:
    C = B; //it is component reference
    break;
  default:
    C = A; //good to have default for wrong ids      
}

return(
  items.map((item, index)=>{
    return(
      <span>
        <C {...item} /> //render component with props
      </span>11

    )
  })
)
}
Run Code Online (Sandbox Code Playgroud)

最重要的事情:

1.C=A;我们设置变量C对目标组件的引用

2. <C {...item} />item 对象的所有属性都将在子组件中设置。

3.它可以按标准方式使用,例如:<C title={item.title} />

一些工作示例:https ://jsfiddle.net/maciejsikora/jtt91wL3/3/