在React Native應用程序上實現Onboarding(或Welcome)屏幕的最佳方式是什麼?屏幕必須有滑塊視圖才能在介紹性點和某些系統之間滑動以存儲「顯示一次」標誌。我可以看到如何用香草代碼來實現它,但可能存在完整的組件?React Native內置屏幕
回答
我沒有找到任何自定義的一體化組件,但我認爲ViewPagerAndroid
和AsyncStorage
的組合可以不費吹灰之力就可以實現(兩個類都來自react-native包)。
例如,對於滑塊視圖,你可以這樣創建組件:
import React, { Component, ViewPagerAndroid, View, Text } from 'react-native';
export default class Onboarding extends Component {
render() {
return (
<ViewPagerAndroid style={{ flex: 1 }} initialPage={0}>
<View style={{alignItems: 'center', padding: 20}}>
<Text>First page</Text>
</View>
<View style={{alignItems: 'center', padding: 20}}>
<Text>Second page</Text>
</View>
</ViewPagerAndroid>
);
}
}
,然後在「顯示一次」標誌,你可以處理它在你的主要應用程序的成分是這樣的:
componentDidMount() {
AsyncStorage.getItem('onboarding').then((val) => {
if (!val) {
this.setState({ onboarding: 'pending' });
AsyncStorage.setItem('onboarding', 'done').done();
} else {
this.setState({ onboarding: val });
}
}).done();
}
render() {
switch (this.state.onboarding) {
case 'pending': return (<Onboarding />);
case 'done': return (<Home />);
default: return (<Loading />);
};
}
此代碼僅在首次執行應用程序時顯示Onboarding組件。您也可以在滑塊最後一個視圖內的按鈕的clic處理程序中將該標誌設置爲「完成」,以便在用戶未完成第一次運行時重複啓動,這取決於您。
如果您還需要在iOS版本,你可以使用<ScrollView pagingEnabled={true}>
代替ViewPagerAndroid
我覺得react-native-app-intro幾乎是你想要的。它給出了一個基本的尋呼機,默認情況下有一些不錯的下一個和完成按鈕,但是您可以爲每個頁面中的元素添加額外的轉換效果。
感謝您發佈此信息。幾天前當我最初看的時候不在這裏。 :) –
是的,存在完整的組件:https://github.com/jfilter/react-native-onboarding-swiper。 (我是作者)
在最基本的情況下,您爲每個頁面提供圖像,標題和副標題。
爲了保存國旗,請使用AsyncStorage
。啓動主屏幕時,請檢查標誌並導航到「入門」屏幕。完成後,設置標誌並導航到主屏幕。參見例如:
async componentWillMount() {
const value = await AsyncStorage.getItem('@SKIP_INTRO');
if (value === null || value !== 'true') {
this.props.navigateToIntro();
}
}
react-native-app-intro是入職的熱門選擇,但它不再是積極維護。所以我建議你去react-native-app-intro-slider,前一個支持最新的React Naive的修改版本。
但是,您應該使用AsyncStorage
自己處理首次啓動設置。
下面的問題將幫助您檢測並設置首次啓動。
- 1. 重置主屏幕的導航堆棧(React Navigation和React Native)
- 2. 在React-Native中定位多個屏幕
- 3. 如何禁用屏幕旋轉(react-native)?
- 4. react-native紅色屏幕錯誤
- 5. react-native-navigation抽屜不改變屏幕
- 6. React Native真正的屏幕大小
- 7. React native - x秒後更改屏幕
- 8. React Native - 如何設置獨立查看大小屏幕大小?
- 9. 如何在React Native的屏幕底部放置一個TextInput?
- 10. 如何將React Native應用導航重置爲React導航的當前屏幕
- 11. 如何在react-native iOS中獲得正確的屏幕寬度?
- 12. 應用程序卡在Splash屏幕上react-native-navigation
- 13. React Native Android中的屏幕之間的導航?
- 14. React-Native:新項目上的空白屏幕
- 15. React-Native鍵盤顯示時的實際屏幕尺寸
- 16. 在React Native App上停止屏幕旋轉
- 17. 在屏幕中心動畫框擴展(React Native Animated)
- 18. Android版在React Native中的初始屏幕
- 19. 在Android上使用react-native的簡單登錄屏幕
- 20. React Native:在屏幕之間傳遞數據
- 21. React-Native:顯示加載屏幕直到加載webview
- 22. 如何使用React Native檢測屏幕解鎖?
- 23. react-native:在屏幕中心顯示微調
- 24. StackNavigation不會將屏幕添加到堆棧React Native
- 25. 將數組打印到React Native中屏幕
- 26. 更新React Native Redux中的狀態後出現空白屏幕
- 27. 使用react-native縮放大於屏幕分辨率的圖像
- 28. 關於React Native初始屏幕的錯誤
- 29. 將用戶導航到listitem上的新屏幕點擊React native
- 30. React-native如何在文本輸入上移動屏幕
在側面說明。如果你打算更多地使用'AsyncStorage',我會建議使用[react-native-simple-store](https://www.npmjs.com/package/react-native-simple-store)。它包裝了'AsyncStorage'的基本功能,並自動爲您提供JSON.stringify和JSON.parse的值。 FWIW。 – jasonmerino