Si está haciendo esto simplemente porque quiere que el Niño proporcione un rasgo reutilizable a sus padres, entonces puede considerar hacerlo usando accesorios de renderizado .
Esa técnica realmente pone la estructura al revés. El Child
ahora envuelve al padre, por lo que lo he renombrado a AlertTrait
continuación. Mantuve el nombre Parent
de continuidad, aunque en realidad no es un padre ahora.
// Use it like this:
<AlertTrait renderComponent={Parent}/>
class AlertTrait extends Component {
// You may need to bind this function, if it is stateful
doAlert() {
alert('clicked');
}
render() {
return this.props.renderComponent(this.doAlert);
}
}
class Parent extends Component {
render() {
return (
<button onClick={this.props.doAlert}>Click</button>
);
}
}
En este caso, AlertTrait proporciona uno o más rasgos que pasa como accesorios a cualquier componente que se le haya dado en su renderComponent
accesorio.
El padre recibe doAlert
como accesorio y puede llamarlo cuando sea necesario.
(Para mayor claridad, llamé al accesorio renderComponent
en el ejemplo anterior. Pero en los documentos React vinculados anteriormente, simplemente lo llamanrender
).
El componente Trait puede representar cosas que rodean al elemento primario, en su función de representación, pero no representa nada dentro del elemento primario. En realidad, podría representar cosas dentro del padre, si pasara otro accesorio (por ejemplo,renderChild
) al padre, que el padre podría usar durante su método de renderizado.
Esto es algo diferente de lo que solicitó el OP, pero algunas personas podrían terminar aquí (como lo hicimos nosotros) porque querían crear un rasgo reutilizable, y pensaron que un componente hijo era una buena manera de hacerlo.