gpt4 book ai didi

react-native - React Native - 嵌套导航器时 react 导航缓慢转换

转载 作者:行者123 更新时间:2023-12-03 18:14:52 30 4
gpt4 key购买 nike

我正在使用 react-native 构建跨平台 native 应用程序,并使用 react-navigation 在屏幕之间导航和使用 redux 管理导航状态。当我嵌套导航器时会出现问题。

例如,我使用 Stack Navigator 作为我的应用程序的默认导航器。

export const DefaultNavigate = new StackNavigator(
{
Login: {
screen: LoginScreen,
},
Home: {
screen: AppDrawerNavigate,
},
AppTabNav: {
screen: AppTabNavigator,
},
}
);

我的第一个屏幕是登录屏幕,主屏幕是抽屉导航器。
const AppDrawerNavigate = new DrawerNavigator(
{
InProcess: {
screen: InProcess,
},
Machine: {
screen: Machine
},
Settings: {
screen: Settings
},
Logout: {
screen: Logout
},
ContactUs: {
screen: ContactUs
}
}
);

当用户在 Drawer Navigator 中单击 Machine 时,我将屏幕导航到 DefaultNavigator 中声明的 AppTabNav。
const AppTabNavigator = new TabNavigator(
{
MachineList: {
screen: MachineList,
},
CalendarView: {
screen: CalendarView,
}
},
);

这是一个标签导航器,有两个屏幕,顾名思义,一个是使用 listview 来显示列表,另一个是使用 calendarview 来显示日历。我的 ListView 数据源中只有大约 30-40 个项目,因此渲染它们对于 ListView 来说是小菜一碟。但是当从 DrawerNavigator 从任何屏幕导航到机器屏幕时,会有 1-2 秒的延迟,并且 js 线程下降到 -2.1,这确实减慢了转换速度。 This drop is frequent whenever I am nesting tab navigator within drawer navigator

如果有人需要抽屉导航器中机器屏幕的代码,那就是,
componentDidMount() {
if(this.state.loaded)
this.props.navigation.dispatch({ type: MACHINE});
}
render() {
return <AppActivityIndicator />
}

以下是我处理屏幕导航的 reducer 代码,
case types.MACHINE:
nextState = DefaultNavigate.router.getStateForAction(
NavigationActions.reset({
index: 1,
actions: [
NavigationActions.navigate({ routeName: 'Home' }),
NavigationActions.navigate({ routeName: 'AppTabNav' })
]
}),
state
);

以下是抽屉导航器中 MachineList 屏幕的渲染方法,
render() {
return (
<View style={styles.container}>
<AppStatusBar />
<ListView
initialListSize={10}
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}
enableEmptySections={true}
/>
</View>
);
}

请帮我解决这个问题。我究竟做错了什么?

依赖
"dependencies": {
"native-base": "^2.3.1",
"react": "16.0.0-alpha.12",
"react-devtools": "^2.5.0",
"react-native": "0.47.1",
"react-native-calendars": "^1.5.8",
"react-native-vector-icons": "^4.3.0",
"react-navigation": "^1.0.0-beta.11",
"react-redux": "^5.0.6",
"redux": "^3.7.2",
"redux-logger": "^3.0.6",
"redux-persist": "^4.9.1",
"redux-thunk": "^2.2.0"
},
"devDependencies": {
"babel-jest": "20.0.3",
"babel-preset-react-native": "3.0.0",
"jest": "20.0.4",
"react-test-renderer": "16.0.0-alpha.12"
},

最佳答案

我面临着同样的问题。切换屏幕时出现明显延迟。我发现这个非常有用的博客 https://novemberfive.co/blog/react-performance-navigation-animations/

所以问题是

When a new screen is pushed, React Navigation will initially render it off-screen and animate it into place afterward. This means that when a complex screen with lots of components that easily takes a few hundred milliseconds to render is pushed



为了解决这个问题,我使用了 InteractionManager .一旦所有动画完成,它基本上会给你回调。

以下是我为避免延迟所做的工作,并且修复后应用程序运行良好。希望这可以帮助。
// @flow

import React, { Component } from 'react';
import { InteractionManager, ActivityIndicator} from 'react-native';

class Team extends Component<Props> {
state = {
isReady : false
}
componentDidMount() {
// 1: Component is mounted off-screen
InteractionManager.runAfterInteractions(() => {
// 2: Component is done animating
// 3: Start fetching the team / or render the view
// this.props.dispatchTeamFetchStart();
this.setState({
isReady: true
})
});
}

// Render
render() {
if(!this.state.isReady){
return <ActivityIndicator />
}
return(
// Render the complex views
)
...
}
}

export default Team;

关于react-native - React Native - 嵌套导航器时 react 导航缓慢转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46127753/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com