我尝试在一个项目中创建Deeplinking,Redux信息之间存在层次关系,当一个链接被粘贴到一个新浏览器的URL中时,它应该能够从该URL导航到该页面,这部分是可行的。
但是,如果通过Redux找到的层次结构信息(以jobID〉projectID〉engagementID〉clientID开始)与Redux中找到的不匹配,那么它应该重定向到“Not Found”页面。
下面是我需要的Redux信息:
使用Redux信息,我为Deeplinking(handleDeepLinkingURL)创建了这个函数:
如果我获取的Redux信息返回“undefined”(例如在URL中输入了错误的jobId Guid),那么我希望它重定向到“Not Found”页面。
handleDeepLinkingURL函数在 Jmeter 板组件中调用。
它的工作原理应该是,如果我从URL中获取jobId(使用React-router-dom中的useParams),并且Redux中还不存在一个作业(它不存在是因为我们使用了deeplinking -我正在匿名浏览器中测试功能,并且使用了一个在Redux中找不到的伪GUID),那么它应该调用我的DeepLinking函数,并且应该向我返回“Not Found Page”。
相反,它加载的是 Jmeter 板页面,而没有将适当的数据添加到Redux或显示在页面上。
这是App.tsx x1c4d 1x中的路由。它基于此动态路由加载 Jmeter 板,而不是重定向到“未找到”页面。
为什么在上下文中找到并在 Jmeter 板组件中调用的重定向功能不能像预期的那样重定向?而是仍然加载 Jmeter 板而不是重定向?
我记录了条件函数调用,Redux信息确实返回为undefined(并且没有SelectedJob,因为我们正在执行Deeplinking),因此它应该调用handleDeepLinkingURL函数的第一部分,并重定向到“Not Found”页面。
相反,它会根据App. tsx中的动态路由错误地加载 Jmeter 板页面。
1条答案
按热度按时间vfwfrxfs1#
您不能从这样的函数返回JSX,并期望它们被呈现到DOM以影响任何实际的导航操作(如果它们被作为回调调用的话)。
根据
Redirect
组件的用法,我假设您正在使用react-router-dom@5
,并且可以访问useHistory
钩子。该组件应该使用useHistory
钩子来访问history
对象,并在handleDeepLinkingURL
回调中发出命令性重定向。示例:
如果
handleDeepLinkingURL
***作为呈现返回的一部分被***调用,并且预期它***确实***返回要呈现的JSX,则它需要实际返回有效的JSX。示例:
...