反応したネイティブのアプリケーションの最初の起動を検出する良い方法は、搭乗/紹介画面を表示するためですか?反応ネイティブの最初の起動を検出する方法
8
A
答えて
15
あなたのロジックは、このに従う必要があります。
class MyStartingComponent extends React.Component {
constructor(){
super();
this.state = {firstLaunch: null};
}
componentDidMount(){
AsyncStorage.getItem("alreadyLaunched").then(value => {
if(value == null){
AsyncStorage.setItem('alreadyLaunched', true); // No need to wait for `setItem` to finish, although you might want to handle errors
this.setState({firstLaunch: true});
}
else{
this.setState({firstLaunch: false});
}}) // Add some error handling, also you can simply do this.setState({fistLaunch: value == null})
}
render(){
if(this.state.firstLaunch === null){
return null; // This is the 'tricky' part: The query to AsyncStorage is not finished, but we have to present something to the user. Null will just render nothing, so you can also put a placeholder of some sort, but effectively the interval between the first mount and AsyncStorage retrieving your data won't be noticeable to the user.
}else if(this.state.firstLaunch == true){
return <FirstLaunchComponent/>
}else{
return <NotFirstLaunchComponent/>
}
}
はそれが私がmartinarroyoの提案にいくつかの調整をした
3
に役立ちます願っています。 AsyncStorage.setItem
はboolではなく文字列値を設定する必要があります。
import { AsyncStorage } from 'react-native';
const HAS_LAUNCHED = 'hasLaunched';
function setAppLaunched() {
AsyncStorage.setItem(HAS_LAUNCHED, 'true');
}
export default async function checkIfFirstLaunch() {
try {
const hasLaunched = await AsyncStorage.getItem(HAS_LAUNCHED);
if (hasLaunched === null) {
setAppLaunched();
return true;
}
return false;
} catch (error) {
return false;
}
}
この機能は、必要なときにいつでもインポートできます。 Async関数がAsyncStorageをチェックするのを待っている間に、null(または何か巧妙なもの)をレンダリングする必要があることに注意してください。
import React from 'react';
import { Text } from 'react-native';
import checkIfFirstLaunch from './utils/checkIfFirstLaunch';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
isFirstLaunch: false,
hasCheckedAsyncStorage: false,
};
}
async componentWillMount() {
const isFirstLaunch = await checkIfFirstLaunch();
this.setState({ isFirstLaunch, hasCheckedAsyncStorage: true });
}
render() {
const { hasCheckedAsyncStorage, isFirstLaunch } = this.state;
if (!hasCheckedAsyncStorage) {
return null;
}
return isFirstLaunch ?
<Text>This is the first launch</Text> :
<Text>Has launched before</Text>
;
}
}
関連する問題
- 1. 反応したネイティブの別のコンポーネントを起動する方法
- 2. 既存のプロジェクトでネイティブの反応ネイティブの起動後ネイティブのアプリケーションに戻る
- 3. 反応したネイティブのTextInput値を検証する方法は?
- 4. 反応ネイティブのスタイルをカスケードする最も簡単な方法
- 5. (反応ネイティブ)反応したネイティブのバッテリーレベルを検出するにはどうすればよいですか?
- 6. アプリケーションの最初の起動を検出するJ2ME
- 7. 反応ネイティブを最新バージョンにアップグレードする方法
- 8. 反応ネイティブでアプリケーション終了を検出する
- 9. 反応のネイティブのカスタムスタイルの検索バー
- 10. 方法で反応し、ネイティブReduxの
- 11. ネイティブの反応でタスクをスケジュールする最良の方法は何ですか?
- 12. ワンクリックアプリケーションと新しいバージョンの最初の起動の検出
- 13. エラー "反応するネイティブの
- 14. 反応するネイティブのEventEmitterListenerを解決する方法
- 15. 反応するネイティブ - カメラロールビデオのサムネイルURIを取得する方法
- 16. 反応起動ストラップフォームコンポーネント
- 17. 最初の行がレンダリングされると、ネイティブonEndReachedに常に反応します
- 18. 反応ネイティブのアプリケーションのURLスキーム/リンクを設定する方法
- 19. 反応起動ストラップコンポーネントのドキュメント
- 20. 反応起動ストラップテーブルのonRowClick
- 21. Zipファイルを取得し、ネイティブの反応でRAMに抽出する方法
- 22. は、反応ネイティブ実行IOSのネイティブ、反応ネイティブのinit AwesomeProjectをREACT:エラー
- 23. 反応 - ネイティブ反応 - ネイティブベクトルアイコン:フォント素晴らしいアイコンを使用する方法
- 24. ネイティブのマップボックスに反応します。gl最初の中心座標
- 25. 反応起動ストラップモーダルをカスタマイズする方法
- 26. ネイティブと反応して円のイメージボタンを実現する方法
- 27. 反応ネイティブでiosのオフラインバンドルを取得する方法
- 28. 反応ネイティブのアンドロイド - PDFファイルをアンドロイドファイルシステムに保存する方法
- 29. 反応ネイティブのセンサーにリスナーを追加する方法は?
- 30. 反応ネイティブのビューを非表示にする方法
'AsyncStorage'使用することを検討してください:http://facebook.github.io/react-native/releases/0.37/docs/asyncstorage.html – Cherniv
をしかし、原因AsyncStorageは〜非同期〜、応答であるという事実のために私はビューを待つことができないコールバックを介して返されます。または私は何かを逃していますか? –
あなたは 'View'状態で遊ぶことができます.LocalStorageの応答までいくつかの' ActivityIndicator'を表示してから、 'this.setState({shouldShowIndicator:false}) 'のようなものでActivityIndicatorを非表示にします。 – Cherniv