如何在react-navigation 6中获取Symbol(CHILD_STATE)的对应值
升级到React Navigation 6后,原route.state属性被移入内部私有Symbol(CHILD_STATE)属性,官方不建议直接访问私有属性,优先使用公开API实现需求。
方案1:官方推荐公开API实现(优先使用)
React Navigation 6提供了useNavigationState钩子可直接获取导航栈状态,不需要操作route对象的内部属性:
import { useNavigationState } from '@react-navigation/native'; // 在组件内调用即可拿到当前导航栈的index值 const stackIndex = useNavigationState(state => state.index); // 匹配index为2的业务逻辑 if (stackIndex === 2) { // 此处写入你原本依赖route.state.index的原有逻辑 }
方案2:临时访问私有Symbol属性(不推荐长期使用)
如果你的场景必须从route对象读取该属性,可通过Object.getOwnPropertySymbols获取对应Symbol键再取值:
// 查找route对象上的CHILD_STATE Symbol键 const CHILD_STATE = Object.getOwnPropertySymbols(route).find( sym => sym.description === 'CHILD_STATE' ); // 读取index值 const childState = route[CHILD_STATE]; const stackIndex = childState?.index; if (stackIndex === 2) { // 你的原有逻辑 }
注意:Symbol开头的属性都是React Navigation的内部私有属性,没有纳入公开API承诺,任意版本迭代都可能修改或移除,仅可作为临时过渡方案使用,长期使用请迁移到方案1的公开API。

内容的提问来源于stack exchange,提问作者rudenick
相关产品推荐
相关产品推荐

