Reaccionar accesorios de renderizado

Descubra cómo Render Props puede ayudarlo a crear una aplicación React

Un patrón común que se utiliza para compartir el estado entre componentes es utilizar elchildrenapuntalar.

Dentro de un componente JSX puede renderizar{this.props.children}que inyecta automáticamente cualquier JSX pasado en el componente principal como hijo:

class Parent extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      /*...*/
    }
  }

render() { return <div>{this.props.children}</div> } }

const Children1 = () => {}

const Children2 = () => {}

const App = () => ( <Parent> <Children1 /> <Children2 /> </Parent> )

Sin embargo, aquí hay un problema: los hijos no pueden acceder al estado del componente principal.

Para poder compartir el estado, necesita usar un componente de apoyo de renderizado, y en lugar de pasar componentes como hijos del componente principal, pasa una función que luego ejecuta en{this.props.children()}. La función puede aceptar argumentos,:

class Parent extends React.Component {
  constructor(props) {
    super(props)
    this.state = { name: 'Flavio' }
  }

render() { return <div>{this.props.children(this.state.name)}</div> } }

const Children1 = props => { return <p>{props.name}</p> }

const App = () => <Parent>{name => <Children1 name={name} />}</Parent>

En lugar de utilizar elchildrenprop, que tiene un significado muy específico, puede usar cualquier prop, por lo que puede usar este patrón varias veces en el mismo componente:

class Parent extends React.Component {
  constructor(props) {
    super(props)
    this.state = { name: 'Flavio', age: 35 }
  }

render() { return ( <div> <p>Test</p> {this.props.someprop1(this.state.name)} {this.props.someprop2(this.state.age)} </div> ) } }

const Children1 = props => { return <p>{props.name}</p> }

const Children2 = props => { return <p>{props.age}</p> }

const App = () => ( <Parent someprop1={name => <Children1 name={name} />} someprop2={age => <Children2 age={age} />} /> )

ReactDOM.render(<App />, document.getElementById(‘app’))

Descarga mi gratisReact Handbook


Más tutoriales de react: