2016-09-28 18 views
4

私の状態が設定されるまで、私は最初にレンダリングしているコンポーネントSplashScreenを持っています。私は何とか私のwebviewが読み込まれている間にこのコンポーネントを表示する方法を見つけたいと思っています。私はonLoadEndを私のwebviewに追加して、読み込みが完了したらメッセージを返すように見えます。問題はスプラッシュスクリーンを最初に読み込んで状態を変更するのを待つときですonLoadEndはwebviewがまだないので実際には変更されませんレンダリングされる。これを行うには良い方法がありますか?React-Native:Webviewがロードされるまでローディング画面を表示

答えて

17

私の解決策は実際には非常に簡単でした.WebViewコンポーネントには、私にとっては機能しないparam renderLoadingがあります。私は、startInLoadingStateも定義する必要があると考えていました。

だから私のWebViewのは次のように何とかなります

<WebView 
    ref={MY_REF} 
    source={source} 
    renderLoading={this.renderLoading} 
    startInLoadingState 
/> 
+1

これは私を助けました。魅力のように動作します。 renderLoadingの場合は、 'renderLoading = {()=> {return()' のような矢印関数を使用することもできますが、これは私にとっては少しバグがあります。 デフォルトローカル関数: 'function renderLoading(){ return(); } 'あなたが説明したようにロードすると、中央の中央に配置されます 私は理由が分かりませんが、これは誰かが時間を節約するのに役立ちます:) – suther

+1

ありがとう、これが行く方法です、またはsutherコメント 'renderLoading = {()=> {return( )} 'しかし、ローダーの位置は、関数の宣言や呼び出しとは関係ありません! ActivityIndi​​catorコンポーネントのスタイルを設定しない場合は、水平に中央に表示されます。' ' – razbard

2

私は同様の問題を抱えていたし、私はこれを一時的にそれを解決するために管理:

loadEnd() { 
this.setState({ webViewLoaded: true }): 
} 
render() { 
const { webViewLoaded } = this.state; 
return (<View> 
     {!webViewLoaded && <LoadingComponent /> } -- or spinner, whatever 

     <WebView 
      style={(webViewLoaded) ? styles.webView : styles.loading} 
      onLoadEnd={() => this.loadEnd.bind(this)} /> 
     </View); 

} 

const styles = StyleSheet.create({ 
    webView: { -- your styles ---}, 
    loading: { 
    width: 0, 
    heigt: 0 
    } 
}); 

ないまさにこれがあなたを助けていますが、同様のアプローチを試みることができるかどうか確認してください。私はこれをおそらくもっと便利に変えるだろう。 ImがまだReact Nativeでかなり初心者であるため、これらの変更をアニメートする可能性があるかどうかはわかりません。

編集:これは私のアプローチだろうスピナー/負荷要素に

9

を隠して、コメントを追加しました:

constructor(props){ 
    super(props); 
    this.state = { webviewLoaded: false }; 
} 

_onLoadEnd() { 
    this.setState({ webviewLoaded: true }); 
} 

render() { 
    return(
     <View> 
      {(this.state.webviewLoaded) ? null : <SplashScreen />} 
      <WebView onLoadEnd={this._onLoadEnd.bind(this)} /> 
     </View> 
    ) 
} 

この方法では、WebViewのがレンダリングされますが、それはSplashScreenの背後に配置されています。したがって、WebビューはSplashScreenが表示されている間に読み込みを開始します。

+0

この場合には、私の状態が変更されていないと、スプラッシュ画面がちょうど画面の上部にロードされたように見えます。 – NinetyHH

+0

WebViewのソースを入れましたか? –

+0

はい、私はこのコードを鉱山に追加しました – NinetyHH