React Router 的 v6.4 是 2022 年初的一个次要版本,它为该包引入了一些突破性的变化。新添加的一组 API 和数据获取模式已从Remix中获取。因为这两个库都是由同一作者编写的,React router v6.4提供了直观的方式来处理数据获取以及对单页应用程序中错误管理的更多控制。要从 React Router v5 迁移到 v6,如何在 Google 文档中创建和插入签名请查看本指南。react-router-dom
在本文中,您将了解 React Router v6.4 中引入的新 API 和模式,如何在手机和 PC 上的 Telegram 中共享屏幕它们简化了基如何在 Gmail 的 Google Chat 上阻止某人于 React 的应用程序的路由。
跳跃前进:
React Router v6.4 中的数据获取
重构你的 React 组件
新的导航 APIOutlet对API的更改
处理错误状态
React Router v6.4 中的数据获取
让我们从一个非常简单的数据获取逻辑开如何在 Telegram 上屏蔽某人始。您可能熟悉下面给出的模式。毕竟,这就是我们从 React 组件中的 API 获取数据的方式。
您只需创建一个fetch函数来调用如何从 Gmail 中删除记住的电子邮件地址 API(在本例中为getBlog)并将其传递给useEffectHook。只要 ID 发生变化,该 Hook 就会重新获取URL,反映您所在的博客文章。如果您需要复习使用带有 Hooks 的 R如何在谷歌浏览器中启用增强保护模式?eact Router的知识,请查看本指南。
最后,您可以在useStateHook 的帮助下手动处理加载和错误状态:
从'react'导入{ useState , useEffect } ;从'react-router-dom'导入{ useParams } ;从'./utils/api'导入{ getBlog }
函数如何阻止MicrosoftTeams上的联系人或聊天BlogDetail ( ) { const [ isLoading , setIsLoading ] = useState ( false ); const [ isError , setError ] = useState ( null ); const [博客, setBlog ] = useState ( null );
// 从 URL 动态获取 id // const params = useParams (); 如何在Telegram上创建电报频道常量ID =参数。编号;
异步函数getBlogs ( ) {
setIsLoading ( true ) try { const blog = await getBlog ( id );
setBlog (博客)如何在WhatsApp上创建自己的贴纸?} catch(错误){
setError (错误。消息)}最后{
setIsLoading (假)} }
useEffect ( () => {
getBlogs () }, [ id ])
return (
<>
{isLoading && <p>Loading...</p>}
{isError && !isLoading && <p>Oops! An Error has Occurred, Try Again</p>}
<BlogPost heading={blog.heading} detail={blog.detail} />
<>
)
}
重构你的 React 组件
虽然这种模式受到鼓励并且运行良好,如何在移动设备和 PC 上关闭 Microsoft Edge 通知但它有一些 React Router v6.4 旨在解决的缺点。首先,数据获取是针对单个请求的大量代码。乍一看,处理错误、加载程序等所有这些如何在 Adobe XD 中共享原型状态值看起来相当标准。
然而,随着应用程序的增长,如何更改YouTube视频质量?它会对代码库造成严重破坏。像这样的 React 应用程序的另一个大缺点是获取自身。Hook仅在组件渲染后运行。所以,换句话说,你只能在屏幕上打印出基本的 UI 后才能开始抓取。如何在 Microsoft Edge 上管理保存的密码您只会在那个时间范围内看到加载程序,如何在 Facebook Messenger 中发送消失的消息这不会带来良好的用户体验。useEffect()
React Router如何在 Facebook Messenger 中使用秘密对话 鼓励删除所有这些用于获取组件的代码块来解决这个问题。相反,使用Remix和 React 路由器如何与他人共享谷歌日历 v6.4 中引入的加载器模式。
您可以通过删除方法中的所如何在 Canva 中删除和替换背景有加载和错误状态以及条件逻辑来开始重构return:
函数BlogDetail ( ) { const [博客, setBlog ] = useState ( null ); const params = useParams (); 常量ID =参数。编号;返回(... )}
导出函数BlogDetailLoader ( id ) { return getBlog ( id ) }
import { BlogDetailLoader, BlogDetail } from ''../BlogDetail";
< Route path = " /blog " element ={< GenericBlogLayout />}> < Router path = " :id " element = {< BlogDetail />}
loader ={ BlogDetailLoader } /> </ Route >
通过使用loaderReact Router v6.4 中的 API,如何在Discord服务器中更改昵称?您的BlogDetail组件现在可以轻松访问返回的数据BlogDetailLoader:
从'react-router-dom'导入{ useDataLoader } ;
函数BlogDetail ( ) {
// 数据变量现在可以访问加载程序返回的任何内容如何知道是否有人在 WhatsApp 上屏蔽了您(在本例中为 getBlog) // const data = useDataLoader (); const params = useParams (); 常量ID =参数。编号;return ( <> < BlogPost heading ={ data . heading } detail = { data . detail } /> <> ) }
导出函数BlogDetailLoader ( id ){ return getBlog ( id ) }
ID您可以通过将 React Router 公开的from传递如何删除Facebook登录中记住的电子邮件地址params给该函数来进一步改进这一点loader,如下所示:
导出函数BlogDetailLoader ( { params } ) { return getBlog ( params.id ) } _ _
您现在已经完全重构了 React 组件,如何在Snapchat上使用“我的眼睛”?并通过使用新的 React Router v6.4 API 清除了所有不必要的Hooks 和显式状态。useEffect()isLoadinguseDataLoader
这种模式消除了加载状态的使用如何在 Google 文档中插入尾注和脚注,因为页面只需要在从 API 获取数据后加载。如何在 Telegram 上隐藏您最后一次看到的内容你可以把它想象成那些服务器端呈现的页面。这创造了一个很好的用户体验,没有烦人的旋转器和加载器等待数据加载。
可是等等!国家呢isError?无论是否成功发出请求,如何在 Google 文档中将图像裁剪成圆形我们仍然需要显式处理 React 组件中的错误状态。
新的导航 API
请务必注意,这些新 API 不向后兼容,如何在 WhatsApp 上预览传出的语音留言需要对您在根级别定义路由的方式进行细微更改。
首先,React Router v6.4 建议将BrowserRouterwith替如何在 Google 表格单元格中插入图像换为RouterProvider,它只是一个自关闭组件,可以作为routerprop:
import { RouterProvider , createBrowserRouter , } from 'react-router-dom' ;
const router = createBrowserRouter ()
功能应用程序( ) { return ( < RouterProvider router = { router } /> // 移动这里定义的所有路由,并传递给它 `createBrowserRouter` ) }
可以简单地获取一个对象数组,如何删除或恢复 Google 云端硬盘中的文件你可以像这样传递你的路线和路径:createBrowserRouter()
const router = createBrowserRouter ([ { element ={ < Welcome /> }, path = "/" }, { element ={ < BlogHome /> }, path = "/blog" }, { element ={ < About /> } ,路径= "/关于" }, ]);
// 将这个 `router` 变量传递给 `RouterProvider` API // < RouterProvider router ={ router } />
但是,您希望传递为页面定义的复杂路由,如何在 Telegram 上创建投票包括动态路由(如带有 的路由ID),
在这种情况下,您可以将另一个函数 如何在 Snapchat 上对某人隐藏故事传递createRoutesFromElements给createBrowserRouterAPI,如下所示:
const router = createBrowserRouter ( createRoutesFromElements ( // 传递之前定义的所有路由));
// 稍后,按原样将 `router` 传递给提供者< RouterProvider router ={ router } />
Outlet对API的更改
当您设置好所有路由并将它们迁移到 v6.4 时,如何在 Windows 10 中卸载 NVIDIA 驱动程序请记住 v6.4 中有一件重要的事情发生了变化——API Outlet。通常,您可能使用过某种共享根布局组件,该组件通过 React 的childrenprop 使用所有子路由。
React Router v6.4 可以更轻松地使用OutletAPI 定义根布局。您可以将整个路由包装在Route(而不是Routes6.4 之前的版本)下并传递一个组件:<SharedRootLayout />
const router = createBrowserRouter ( createRoutesFromElements ( < Route path = "/" element = { < SharedRootLayout /> }> < Route path = "/blog" element = { < GenericBlogLayout /> }> < Router path = ":id" element = { <博客详情/>}
loader ={ BlogDetailLoader } />
</路线> </路线> ));
在SharedRootLayout组件中,如何在 Snapchat 上使用 Snap 地图您可以在下面的代码中使用新的 outlet API:
从'react-router-dom'导入{ Outlet } ;
函数SharedRootLayout ( ) { return ( <> < Navbar /> // 将 {children} 替换为< Outlet />,这个 Outlet API // 现在可以访问 Root 下的所有 `children` 什么是 Discord 中的对话线程以及如何使用它们路由 ` < Route /> ` // < Outlet /> </> ) }
因此,这些 API createBrowserRouter、createRoutesFromElements和完全改变了我们在 React Router v6.4 中定义路由的方式。这些变化使 React Router v6.4 更加健壮,可以进行复杂的路由。<Outlet />
处理错误状态
到目前为止,您已经将加载器状态、如何在 Google 文档中创建可填写的表单路由等重构到最新的 v6.4,但是错误状态呢?如果网络请求失败,您仍然需要进行某种检查。在这种情况下,下面的代码不再相关,因为您已经摆脱了 HookuseEffect和这些状态值的手动处理:
{ isError && < p >糟糕!发生错误< / p > } _
值得庆幸的是,React Router v6.4 提供了错误处理 API,使处理此类情况变得轻而易举。如果出现问题,您需要errorElement向自动处理错误状态添加一个道具:Route
< Router path = ":id" element ={< BlogDetail />} loader ={ BlogDetailLoader }
errorElement ={< p >糟糕!Something Went Wrong < / p >} / > // 甚至将错误页面组件传递给 `errorElement` prop < Router path = ":id" element ={< BlogDetail />} loader ={ BlogDetailLoader }
errorElement ={<
404页/>} />
errorElementReact Router v6.4 如何使用 Gmail 中的机密模式还提供了在根级别添加的灵活性Route,与组件一样。<SharedRootLayout />
在您需要访问错误消息并将其呈现在该 UI 页面上的情况下,如何在网页版和 iPad 版 Google 幻灯片中添加 GIF您可以使用错误 Hook 来挖掘实际原因或错误消息并将其记录到屏幕上:useRouteError()
从'react-router-dom'导入{ useRouteError } ;
函数BlogDetail ( ) { const error = useRouteError () return ( // UI 的其余部分<div> Error : { error . status } , Sorry { error . message } } < / div > ) }
如您所见,它具有类似于 v6.4 之前的 React Router 的模式,如何在 Discord 中显示为离线但允许更多的灵活性和控制。
结论
在本文中,您看到 React Router v6.4 被证明是 React Router 团队最重要的版本之一。它引入了一系列直接来自 Remix 的新 API 和想法。如何在概念中创建和使用反向链接尽管所有这些新做法乍一看似乎很陌生,但无疑大大改善了开发人员和最终用户的体验。React Router v6.4 提供的功能远不止于此。要了解更多信息,请查看他们的官方发布文档。