một cách tốt để phát hiện ra mắt đầu tiên và ban đầu của một ứng dụng bản địa phản ứng, để hiển thị một màn hình on-boarding/giới thiệu là gì?Làm thế nào để phát hiện ra mắt đầu tiên trong phản ứng bản địa
8
A
Trả lời
15
Logic của bạn nên làm theo điều này:
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/>
}
}
Hy vọng nó giúp
3
tôi đã thực hiện một số điều chỉnh để đề nghị martinarroyo của. AsyncStorage.setItem
nên đặt giá trị chuỗi và không phải là giá trị 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;
}
}
Chức năng này sau đó có thể được nhập bất cứ nơi nào bạn cần. Lưu ý rằng bạn nên render null (hoặc một cái gì đó thông minh khác) trong khi đợi hàm async để kiểm tra AsyncStorage.
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>
;
}
}
Các vấn đề liên quan
- 1. iOS lần đầu tiên ra mắt - phát hiện nếu ứng dụng được khởi chạy lần đầu tiên
- 2. Phát hiện sự ra mắt của một ứng dụng
- 3. Ứng dụng một lần nhấp và phát hiện ra mắt phiên bản mới
- 4. phản ứng bản địa: ListView, làm thế nào để đẩy hàng mới từ đầu
- 5. Phát hiện lần chạy đầu tiên của ứng dụng
- 6. Làm thế nào để kiểm tra trạng thái mạng trong ứng dụng phản ứng bản địa
- 7. Làm thế nào để xây dựng ứng dụng Android bản địa phản ứng cho sản xuất?
- 8. Ra mắt bản cập nhật SDK OTA
- 9. Lỗi EACCESS bắt đầu phản ứng bản địa cho setup_env.sh
- 10. Làm thế nào để tạo ra chức năng trợ giúp toàn cầu trong phản ứng bản địa?
- 11. Làm cách nào để phát hiện ứng dụng Electron đang chạy lần đầu tiên?
- 12. Làm thế nào để phát hiện dòng đầu tiên và cuối cùng trong reader.readLine()?
- 13. vấn đề z-index trong phản ứng bản địa
- 14. Làm thế nào để phát hiện mắt học sinh tròn trong opencv
- 15. Giao thức PEX (Liên kết từ) phát hiện ra IP đầu tiên như thế nào?
- 16. Phản ứng bản địa bóng không xuất hiện
- 17. Làm thế nào để sử dụng chờ đợi từ khóa trên phản ứng bản địa?
- 18. Làm thế nào để thiết lập màn hình giật gân cho android phản ứng bản địa
- 19. Làm thế nào để hiển thị văn bản (CÓ/KHÔNG) bên trong một công tắc trong phản ứng bản địa
- 20. Java - Làm thế nào để phát hiện phiên bản IP
- 21. Làm thế nào để có được một versionName trong ứng dụng bản địa phản ứng trên Android?
- 22. Làm thế nào để mã hóa và giải mã một văn bản trong phản ứng bản địa?
- 23. Làm thế nào để xây dựng và triển khai một ứng dụng phản ứng bản địa từ dòng lệnh?
- 24. đòi hỏi hình ảnh trong phản ứng bản địa 0.14.2
- 25. Làm thế nào để tạo ra một phản ứng bị cấm trong Symfony2?
- 26. Làm thế nào để làm cho thanh Tab cho Android như TabBarIOS trong phản ứng bản địa?
- 27. phát hiện nháy mắt cho iphone sdk
- 28. Làm thế nào để chúng tôi có được một đoạn Android để hiển thị trong bản địa phản ứng?
- 29. Làm thế nào để phát hiện đầu vào cảm ứng trên Android
- 30. làm thế nào để xử lý các địa ngục nhập khẩu trong phản ứng?
Cân nhắc sử dụng 'AsyncStorage': http://facebook.github.io/react-native/releases/0.37/docs/asyncstorage.html – Cherniv
Nhưng do thực tế rằng AsyncStorage là ~ async ~, phản ứng được trả về thông qua một cuộc gọi lại, mà tôi không thể thực hiện chế độ xem chờ đợi. Hay tôi đang thiếu một cái gì đó? –
bạn có thể chơi với trạng thái 'View', cho phép bạn có thể hiển thị một số câu trả lời' ActivityIndicator' cho đến khi LocalStorage ', rồi ẩn ActivityIndicator bằng một cái gì đó như 'this.setState ({shouldShowIndicator: false})' – Cherniv