React Native中React Navigation如何获取onStateChange格式的初始导航状态
解决方案
以下两种方案都可以拿到和onStateChange返回格式完全一致的首屏初始导航状态:
方案一(推荐):结合onReady回调获取
NavigationContainer提供的onReady回调会在导航首次加载完成、状态初始化完毕后触发,此时调用实例的getRootState()方法即可拿到初始状态,和onStateChange返回的结构完全一致。
export default function App() { const [pageState, setPageState] = React.useState(); const navigationRef = React.useRef(null); // 统一处理导航状态,保证初始和后续更新的处理逻辑一致 const updatePageState = (state) => { setPageState(state); // 此处可添加你的其他业务逻辑 }; return ( <NavigationContainer ref={navigationRef} onReady={() => { const initialState = navigationRef.current.getRootState(); updatePageState(initialState); }} onStateChange={(state) => updatePageState(state)} > <RootNavigation /> </NavigationContainer> ); }
注意事项:
- 必须等待
onReady触发后再调用getRootState(),否则导航未初始化完成,返回值为undefined - 该方案不需要修改原有导航逻辑,侵入性最低
方案二:使用受控导航状态模式
如果你需要深度控制导航逻辑,也可以自行维护导航状态,直接拿到初始值:
export default function App() { // 也可以传入自定义的初始导航状态作为useState的默认值 const [pageState, setPageState] = React.useState(); return ( <NavigationContainer state={pageState} onStateChange={(newState) => setPageState(newState)} > <RootNavigation /> </NavigationContainer> ); }
注意事项:
- 该方案下导航状态完全由你控制,适合需要自定义导航恢复、强制修改路由等场景
- 如果不需要自定义初始状态,
state初始值可以设为undefined,导航会自动生成默认初始状态并同步到你的state中
内容的提问来源于stack exchange,提问作者İlker
相关产品推荐
相关产品推荐

