React: Pass component as prop without using this.props.children

社会主义新天地 提交于 2019-12-11 01:47:34

问题


I have this a component 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>

And then on button.js I have:

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>
  )
}

I want to render <IconStar> inside <Button>, how do I do that?.

I can't pass this as this.prop.children because it has more logic around the icon prop, but in this case I'm showing only a demo.

Thanks


回答1:


The only thing you have missed is that for JSX to transpile to JS custom components should be named starting with a capital letter, e.g. <TheIcon />, while lowercase letter signifies native DOM elements, e.g. <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/




回答2:


If your using es6 then you can use a spread operator to pass the attributes to a below component, I think that might solve your problem:

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>

so the ...props will pass myProps into IconStar. Obviously you can pass anything you want through.



来源:https://stackoverflow.com/questions/42510874/react-pass-component-as-prop-without-using-this-props-children

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!