开发者问题收集

React Native 无法从“屏幕模式”推送屏幕

2022-06-23
2251

我有一个如下的模态屏幕:

<Stack.Screen name="ForwardChatContent" component={ForwardChatContentScreen}
                            options={{
                              presentation: 'modal',
                            }} />

在此处输入图像描述

我想从这个屏幕推送一个屏幕,例如我有如下的其他屏幕:

<Stack.Screen name="ForwardChatToUser" component={ForwardChatToUserScreen}

但是当使用导航时,它没有显示新屏幕,有人可以帮忙吗?谢谢

更新,我将 ForwardChatContent 和 ForwardChatToUser 更改为堆栈导航器,如下所示:

const forwardStack = () => {
    return <Stack.Navigator>
      <>
        <Stack.Screen name="ForwardChatContent" component={ForwardChatContentScreen}
          options={{
            presentation: 'modal',
          }} />
        <Stack.Screen name="ForwardChatToUser" component={ForwardChatToUserScreen}
          options={{
            // presentation: 'modal',
          }} />
      </>
    </Stack.Navigator>
  }

导航时我使用此代码:

RootNavigation.navigate('ForwardChat', {message : props.currentMessage})

但在 ForwardChatContent 中我收到错误 ERROR TypeError:未定义不是对象(评估“route.params.message”) * 因为我使用此代码获取消息:

const message = route.params.message

您能提供一些方法来获取参数吗,谢谢

2个回答

这是因为当您将屏幕作为 Modal 打开时,它会被视为现有导航堆栈中的一组单独集合,它期望 Modal 是导航堆栈,而不仅仅是屏幕。

就您而言, ForwardChatContentScreen 只是一个简单的 <Stack.Screen> 它没有导航堆栈。

将其从屏幕更改为导航堆栈即可工作,并以您的屏幕为根打开导航堆栈作为 Modal,然后它就可以工作了。

在此处查看 演示

干杯。

iphonic
2022-06-23

我知道这个问题已经很老了,但是我自己现在已经处理过这个问题了,我发现一个解决方案是在导航之前调用 pop:

RootNavigation.pop();    
RootNavigation.navigate('ForwardChat', {message : props.currentMessage})

将此作为 @iphonic 提供的解决方案的替代解决方案发布

alex sarbu
2023-03-20