2017-08-29 19 views
1

上のWebViewのビデオリロード自体、私は次の構造を持っている:iOSの上でネイティブリアクト - 親状態変化

class Parent extends Component { 
    state = { isHeaderCollapsed : false } 

    render() { 
     <ScrollView decelerationRate="fast" stickyHeaderIndices={isHeaderCollapsed && [0]} scrollEventThrottle={1} onScroll={(value) => this.setState({isHeaderCollpased: true})} style={styles.body}> 
      <JobHeader collapsed={isHeaderCollapsed} /> 
      <WebView allowsInlineMediaPlayback={true} style={[styles.video, style]} javaScriptEnabled={true} source={{uri: mediaUrl}} /> 
     </ScrollView> 
    } 

を、私は親コンポーネントの状態を変更する非常に時間が、WebViewの中ユーチューブ動画自体を更新します。私はこれが起こることを望んでいない。 ありがとう!

答えて

2

あなたは再度レンダリングか必要かどうかを確認するためにshouldComponentUpdateを使用することができます。

class Parent extends Component { 
    constructor(){ 
     super(); 
     this.state = { 
      isHeaderCollapsed : false 
     } 
    } 

    shouldComponentUpdate(nextProps, nextState){ 
     return nextState.isHeaderCollapsed !== this.state.isHeaderCollapsed; 
    } 

    render() { 
     <ScrollView decelerationRate="fast" stickyHeaderIndices={isHeaderCollapsed && [0]} scrollEventThrottle={1} onScroll={(value) => this.setState({isHeaderCollpased: true})} style={styles.body}> 

       <JobHeader collapsed={isHeaderCollapsed} /> 
       <WebView allowsInlineMediaPlayback={true} style={[styles.video, style]} javaScriptEnabled={true} source={{uri: mediaUrl}} /> 

     </ScrollView> 
    } 
+0

おかげ@Andrew、すでにそれを試してみました。私はこれだと思います: StickyHeaderIndices = {isHeaderCollapsed && [0]} '' ''メソッドは、スティッキーヘッダーを引き起こし、子供全体を再レンダリングさせます。 –

+0

Hmmm、interesting ... – Andrew

+0

WebViewをカスタムコンポーネント。次に、親が更新されたときにshouldComponentUpdateで再レンダリングすることをブロックできます。 – basudz

関連する問題