Github地址
Interactionmanager可以將一些耗時(shí)較長的工作安排到所有互動或動畫完成之后再進(jìn)行葛虐。這樣可以保證JavaScript動畫的流暢運(yùn)行胎源。應(yīng)用這樣可以安排一個(gè)任務(wù)在交互和動畫完成之后執(zhí)行:
InteractionManager.runAfterInteractions(() => {
// ...耗時(shí)較長的同步的任務(wù)...
});
使用react-native自帶的Navigator組件屿脐。navigator跳轉(zhuǎn)到的頁面如果需要返回到該頁面涕蚤,則使用navigator.push()。如果不需要返回該頁面赞季,則使用 navigator.resetTo()。
import {Navigator}from 'react-native'
//主頁替換啟動頁
this.timer = setTimeout(() => {
InteractionManager.runAfterInteractions(() => {
SplashScreen.hide();
navigator.resetTo({
component: HomePage,
name: 'HomePage',
params:{
theme:this.theme
}
});
});
}, 500);
注意:InteractionManager.runAfterInteractions與setTimeout可以結(jié)合使用申钩。
AsyncStorage持久化緩存的讀取與緩存的過程是異步的,可以與Promise結(jié)合撒遣,避免多層回調(diào)。
export default class ThemeDao {
getTheme() {
return new Promise((resolve, reject)=> {
AsyncStorage.getItem(THEME_KEY, (error, result)=> {
if (error) {
reject(error);
return;
}
if (!result) {
this.save(ThemeFlags.Default);
result = ThemeFlags.Default;
}
resolve(ThemeFactory.createTheme(result));
});
});
}
save(themeFlag) {
AsyncStorage.setItem(THEME_KEY, themeFlag, (error, result)=> {
});
}
}
new ThemeDao().getTheme().then((data=>{
this.theme=data;
}));
注意: class的用法义黎。