私の状態が設定されるまで、私は最初にレンダリングしているコンポーネントSplashScreenを持っています。私は何とか私のwebviewが読み込まれている間にこのコンポーネントを表示する方法を見つけたいと思っています。私はonLoadEndを私のwebviewに追加して、読み込みが完了したらメッセージを返すように見えます。問題はスプラッシュスクリーンを最初に読み込んで状態を変更するのを待つときですonLoadEndはwebviewがまだないので実際には変更されませんレンダリングされる。これを行うには良い方法がありますか?React-Native:Webviewがロードされるまでローディング画面を表示
4
A
答えて
17
私の解決策は実際には非常に簡単でした.WebViewコンポーネントには、私にとっては機能しないparam renderLoadingがあります。私は、startInLoadingStateも定義する必要があると考えていました。
だから私のWebViewのは次のように何とかなります
<WebView
ref={MY_REF}
source={source}
renderLoading={this.renderLoading}
startInLoadingState
/>
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
が表示されている間に読み込みを開始します。
これは私を助けました。魅力のように動作します。 renderLoadingの場合は、 'renderLoading = {()=> {return( )' のような矢印関数を使用することもできますが、これは私にとっては少しバグがあります。 デフォルトローカル関数: 'function renderLoading(){ return( ); } 'あなたが説明したようにロードすると、中央の中央に配置されます 私は理由が分かりませんが、これは誰かが時間を節約するのに役立ちます:) –
suther
ありがとう、これが行く方法です、またはsutherコメント 'renderLoading = {()=> {return( )} 'しかし、ローダーの位置は、関数の宣言や呼び出しとは関係ありません! ActivityIndicatorコンポーネントのスタイルを設定しない場合は、水平に中央に表示されます。' ' –
razbard