Reputation: 8551
wonder if it is possible to pass a component a property as following
ReactDOM.render(
<ContainerBox anotherComponent={<AnotherComponent />} />, document.body);
And then insider the ContainerBox
I want to pass AnotherComponent
a property in following way.
class ContainerBox extends React.Component {
clickHandler() {
//does something fun
}
render () {
return (
this.props.anotherComponent(this.clickHandler) //<----- is it possible to pass properties from here?
);
}
}
Is it possible to pass things from ContainerBox
to AnotherComponent
from that position?
ContainerBox
has a clickHandler function
which I want to pass to AnotherComponent
. It is possible to do so if I move <AnotherComponent />
to inside of render()
instead. But then I cannot reuse ContainerBox
for other components without first copying the whole ContainerBox
.
Does it make sense? Hope you can understand.
UPDATED code example
Upvotes: 0
Views: 207
Reputation: 6509
Yes, that is possible. However, it's more common to do it like this
ReactDOM.render(
<ContainerBox><AnotherComponent /></ContainerBox>, document.body);
And in ContainerBox
class ContainerBox extends React.Component {
render () {
return (
this.props.children
);
}
}
Read more about reacts this.props.children here: https://facebook.github.io/react/docs/multiple-components.html#children
I just want to point out that in this example, we are not passing a component, but an element (the result of rendering the component).
It's also possible to pass components, like this:
<Foo buttonComponent={FancyButtonComponent} />
and in Foo:
render() {
Button = this.props.buttonComponent;
return (
<div>
...
<Button />
</div>
);
}
Upvotes: 3