当前位置: 首页 > 科技观察

Remixvs.Next.js:一文深度剖析

时间:2023-03-13 15:49:09 科技观察

{'.container{margin:20px;}p{color:blue;}`}前言Next.js是最流行的服务器端渲染React框架之一。流行多年,受到众多开发者的喜爱。然而,随着开源Remix的推出,开发者开始思考哪个框架对他们的应用程序更友好,所以,在本文中,我将比较Next.js和Remix的一些重要特性,以帮助您选择最合适的框架.路由系统在路由方面,Remix和Next.js有很多相似之处。例如,它们都遵循基于文件的常规路由系统并支持动态路由。在Next.js中也是如此,当你在/pages文件夹中创建一个文件时,它会自动被设置为一个路由。pages/index.js==>/pages/users/index.js==>/userspages/users/create.js==>/users/createRemix也会自动创建路由。不过,你需要在app/routes文件夹下创建文件。app/routes/index.js==>/app/routes/users/index.js==>/usersapp/routes/users/create.js==>/users/create区别Remix路由是基于react-router构建的是的,你可以直接使用ReactHooks,比如useParams和useNavigate。另一方面,Remix内置了对嵌套布局的嵌套路由的支持,而Nest.js则没有。数据加载Web应用程序中有多种数据加载技术。它们是:(SSR)Serversiderenderingintheruntimeserverrendering。(SSG)StaticSiteGeneration静态生成+(ISR)IncrementalStaticRegeneration增量静态生成。(CSR)Client-siderendering在运行时客户端渲染。混合服务端渲染和客户端渲染以及静态生成在Next.js中,开发者可以自由选择以上所有方法和技术来加载数据。比如我的博客[1]使用SSG将文章详情页做成静态资源,新写的文章使用增量静态生成,不需要重新打包。可以使用getServerSideProps方法直接获取数据,也可以在构建时通过getStaticProps和getStaticPath从服务端加载数据。下面的代码示例展示了如何使用getServerSideProps加载数据query(id)return{props:{id,Data}}};exportdefaultfunctionage({id,data}){return(

idparameteronurl:{id}

根据id插件,结果是:{data}

);}Remix中只支持SSR和CSR,也只支持这两种。你得在路由页面导出一个loader,然后使用useFetcherHook从服务端渲染中获取数据。import{useLoaderData}from"remix";exportletloader=async({params,request})=>{constid=params.id//通过url上的id获取数据//constdata=awaitdb.res.query(id)return{id,data}};导出默认函数Page(){let{id,dataLimit}=useLoaderData();return(
idparameteron

url:{id}

根据idpluginresultis:{data}

);}Next.js支持Server侧渲染(SSR)、静态站点生成(SSG)、增量静态生成(ISR)和CSR(客户端渲染)。相比之下,Remix只支持SSR和CSR。使用Session和cookieNext.js中没有内置函数可以直接操作cookie。但是像Cookie.js这样的流行库可以与Next.js或NextAuth.js一起使用,比如在cookie中保存用户身份验证数据。Remix支持开箱即用的方法来操作cookie。可以通过调用函数生成cookie,然后序列化或解析数据进行存储或读取。Remix中的以下代码片段显示了如何在Remix中创建用于管理浏览器cookie的逻辑函数。import{createCookie}from"remix";constcookie=createCookie("cookie-name",{expires:newDate(Date.now()+60),httpOnly:true,maxAge:60,path:"/",sameSite:“宽松”,秘密:[“s3cret1”],安全:真});StyleRemix在风格上与Next.js略有不同。Remix提供了内置的技术,可以使用links方法动态添加样式,而Next.js支持Styled-JSX作为CSSinJS方案或使用css模块,全局样式只能写在最外层的app.js函数中Home(){return(

我在Next.js中的购物车

一些段落

{'.container{margin:20px;}p{color:blue;}`}
)}exportdefaultHomeRemix使用标签向页面添加样式的简单方法。当页面切换为自动加载本页下的样式时,原页面下的样式会自动删除。以下代码片段显示了如何使用链接功能在Remix中加载样式表。exportfunctionlinks(){return[{rel:"stylesheet",href:"https://test.min.css"}];}通过上面的代码,链接会在页面自动加载和卸载。Next.js没有内置Form,需要使用ajax处理。Remix通过替换提供了内置的表单功能,然后在行动中,使用formData.get("\_action")获取数据exportasyncfunctionaction({request}){letformData=awaitrequest.formData();让action=formData.get("_action");switch(action){case"update":{//做你的更新returnupdateProjectName(formData.get("name"));}case"delete":{//删除returndeleteStuff(formData);}默认值:{thrownewError("Unexpectedaction");}}}导出默认函数Projects(){letproject=useLoaderData();return(<>

更新项目

更新Delete);}部署Next.js可以安装在任何服务器上,next运行build&&nextstart,并且支持serverless模式,Netlify团队也在写serverless适配Remix也可以在任何平台上运行,与任何系统接口。所以Remix是一个HTTP服务器请求处理程序,可以让你使用任何服务器。当您构建Remix应用程序时,系统会询问您要将其部署到哪里,在撰写本文时,有以下选项:RemixAppServerExpressServerNetlifyCloudflarePagesVercelFly.ioArchitect(AWSLambda)Horizo??ntalvs.Next.jsRemixSSG静态站点生成?不支持内置SSR服务端渲染?内置getServerSideProps?通过loaderAPI进行路由?在pages/api/目录下混音是路由,可以更灵活的自定义路由Forms表单没有内置?内置,功能强大基于文件系统的路由管理?页面级?未内置组件级会话管理?内置Cookies,SessionsdisabledJS没有提供足够的支持?静态页面路由样式?提供全局和组件级样式支持路由不支持TailwindCSS等级CSS加载和卸载嵌套布局?内置i18n国际化?内置非内置图像优化?通过next/image组件?GoogleAMP通过simple转换,替代质量等?内置非内置适配器Node.jsRequestandResponse接口FetchAPIRequestandResponse接口Preloadlink自动非自动异常处理创建404、500等页面使用ErrorBoundary组件本地抛错Polyfillfetch、Object.assign和URLfetch总结适用场景Next.js静态网站。这是它最大的优势。配合Tailwindcss,可以更加灵活的制作出样式精美的页面和组件,并且拥有比较完善的生态系统。适合快速上手做项目。Remix管理后台,做好数据加载、嵌套数据或组件路由、并发加载的优化,异常处理可以精确到本地。或许是需要折腾的下一代Web开发框架。总的来说,Remix是一个强大的框架,将在2022年变得更加普遍。但是,在处理生产级应用程序时,使用Next.js将是显而易见的选择,因为它已经建立并得到社区的支持。参考网站的未来:Next.jsandRemix[2]Remixvs.Next.js:ADetailedComparison[3]本文主要翻译了上面的文章,但有不完整的部分,我做了修改和补充。参考文献[1]博客:https://maqib.cn/[2]网站的未来:Next.js和Remix:https://segmentfault.com/a/1190000041050654[3]Remixvs.Next.js:详解对比:https://img.ydisp.cn/news/20220902/tg4rjz2baps