Reactレンダリングプロップ

RenderPropsがReactアプリケーションの構築にどのように役立つかを学ぶ

コンポーネント間で状態を共有するために使用される一般的なパターンは、children小道具。

コンポーネントJSX内でレンダリングできます{this.props.children}これは、親コンポーネントに子として渡されたJSXを自動的に挿入します。

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

ただし、ここには問題があります。親コンポーネントの状態に子からアクセスできないということです。

状態を共有できるようにするには、レンダープロップコンポーネントを使用する必要があります。コンポーネントを親コンポーネントの子として渡す代わりに、関数を渡して実行します。{this.props.children()}。関数は引数を受け入れることができます:

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>

を使用する代わりにchildren非常に特殊な意味を持つpropは、任意のpropを使用できるため、同じコンポーネントでこのパターンを複数回使用できます。

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

私の無料ダウンロードReactハンドブック


その他の反応チュートリアル: