我有一个组件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
传递,因为它在图标道具周围有更多逻辑,但在这种情况下,我只显示了一个演示。
由于
答案 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>
)
}
答案 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。显然你可以传递你想要的任何东西。