2016-10-19 11 views
1

は、私は次のようにレンダリングする機能を伴って反応ルーターによって使用されている親コンポーネントを持つ:ReactJS:this.props.childrenから親のsetState()を呼び出す方法は?

render() { 
     return (
      <Grid> 
       <Breadcrumb> 
        {this.state.breadcrumbs} 
       </Breadcrumb> 
       {this.props.children} 
      </Grid> 
     ); 
    } 

と子供の一つは、()、いくつかのJSONを取得しようとします。このjsonには、親のthis.state.breadcrumbsを更新するための追加情報が含まれていますが、これを実現する方法がわかりません。

答えて

2

小道具として親の状態を変更する関数を渡し、次の...

親コンポーネント

updateState(newState){ 
    this.setState({ 
    breadcrumbs: newState, 
    }) 
} 

render() { 
    var childrenwithProps = React.Children.map(this.props.children, function (child){ 
    return React.cloneElement(child, { 
     updateParentState: this.updateState 
    }) 
    }) 
     return (
      <Grid> 
       <Breadcrumb> 
        {this.state.breadcrumbs} 
       </Breadcrumb> 
       {childrenwithProps} 
      </Grid> 
     ); 
    } 

子コンポーネント

fetch() 
.then() 
.then(function(data){ 
    this.props.updateParentState(data) 
}) 

をお試しください子供に。子から、新しい状態をパラメータとしてthis.props.updateStateでこの関数を呼び出します。これにより、親の状態が更新されます。

希望します。

+0

パフォーマンスは...これは遅いですか?クローンの要素は一般的にはうまくいかないようです... – Ben

+0

@Benこの情報は、あなたが新しいpropsでクローン化する必要があるthis.props.childrenに送るため、オプションがありません。パフォーマンスは賢明です私はそれが多くの影響を与えるとは思わない。あなたができる良いことは、ループでそれをチェックすることによって必要な子のみを複製することです。これにより、パフォーマンスへの影響が軽減されます。 –

関連する問題