React:在不使用this.props.children的情况下将组件作为prop传递

时间:2017-02-28 14:06:17

标签: javascript reactjs jsx

我有一个组件Foo.js

// a svg component with a star.svg icon
import { IconStar } from 'react-svg-icons'; 

// call a button with a custom icon
<Button icon={ IconStar }> Click to trigger </Button>

然后在button.js我有:

render() {
  const theIcon = this.props.icon;
  return (
    <button>
      {this.props children}
      {icon() /*this works but i can't pass props inside it*/} 
      <theIcon className={ Styles.buttonIcon } />
    </button>
  )
}

我想在<IconStar>内呈现<Button>,我该怎么做?

我无法将其作为this.prop.children传递,因为它在图标道具周围有更多逻辑,但在这种情况下,我只显示了一个演示。

由于

2 个答案:

答案 0 :(得分:5)

你唯一遗漏的是,JSX要转换为JS自定义组件应该以大写字母开头,例如<TheIcon />,而小写字母表示原生DOM元素,例如<button />

render() {
  const TheIcon = this.props.icon;  // note the capital first letter!
  return (
    <button>
      {this.props children}
      <TheIcon className={ Styles.buttonIcon } />
    </button>
  )
}

https://jsfiddle.net/03h2swkc/3/

答案 1 :(得分:0)

如果您使用es6然后您可以使用扩展运算符将属性传递给下面的组件,我认为这可以解决您的问题:

var MyIcon = (props) => {
  return <i {...props}> {
    props.className
  } < /i>
};
var MyButton = (props) => {
  return ( < button > {
      props.children
    }<MyIcon {...props} />< /
    button > );
}

ReactDOM.render( <
  MyButton className = 'my-icon'>My Button Text</MyButton> ,
  document.getElementById('myComponent')
)
<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='myComponent'></div>

所以......道具会将myProps传递给IconStar。显然你可以传递你想要的任何东西。