Remix 对比 Next.js :一文深度解析

sxkk20081年前知识分享140

前言

Next.js 是用于服务器端渲染的最流行的 React 框架之一,它流行了很多年,并且被许多开发者所喜爱。

然而,随着 Remix 的开源引入, 开发人员已经开始怀疑哪个框架对他们的应用程序来说更加友好,所以,在本文中,我将对比 Next.js 和 Remix 的一些重要特性,来帮助您选择最佳框架。

路由系统

当谈到路由时,Remix 和 Next.js 之间有许多相似之处。例如, 它们都遵循基于文件的约定式路由系统,并支持动态路由。

相同点 在 Next.js 中, 当你在 /pages 文件夹下创建一个文件, 它将自动设置为路由。

pages/index.js ==> /

pages/users/index.js ==> /users

pages/users/create.js ==> /users/create

Remix 也会自动创建路由. 但是, 你需要在app/routes 文件夹下创建文件。

app/routes/index.js ==> /

app/routes/users/index.js ==> /users

app/routes/users/create.js ==> /users/create

差异性 Remix 路由是基于 react-router 构建的, 并且你可以直接使用 React Hooks, 比如 useParamsuseNavigate。 另一方面, Remix 内置支持嵌套布局的嵌套路由,而 Nest.js 则不支持.

数据加载

web 应用程序中有几种数据加载技术。分别是:

  • (SSR)Server-side rending in the runtime 服务端渲染.
  • (SSG) Static Site Generation 静态生成 + (ISR) Incremental Static Regeneration 增量静态生成 .
  • (CSR)Client-side rending at runtime 客户端渲染.
  • 混合服务端渲染和客户端渲染和静态生成

在 Next.js 中, 开发人员可以自由的选择上述所有方法技术从加载数据,比如我的博客就是使用了 SSG 将文章详情页打成静态资源,新写的文章就使用了增量静态生成,不需要再次打包。

你可以使用getServerSideProps这个方法直接获取数据,并且可以通过 getStaticPropsgetStaticPath 在构建时从服务器端加载数据。以下代码示例显示如何使用 getServerSideProps 加载数据.

export const getServerSideProps = async ({ params, query }) => {
  const id = params.id
  // 通过 url 上的id 获取数据
  // const data= await db.res.query(id)
  return { props: { id, Data } }
}

export default function age({ id, data }) {
  return (
    <div>
      <h1>url 上的id 参数: {id}h1>
      <h2>根据id 插件结果是: {data}h2>
    div>
  )
}

在 Remix 中 ,只支持 SSR 和 CSR,只支持这 2 种。

你必须导出一个 loader 在路由页面,然后使用 useFetcher 这个 Hook 从服务端渲染中获取数据

import { useLoaderData } from 'remix'

export let loader = async ({ params, request }) => {
  const id = params.id
  // 通过 url 上的id 获取数据
  // const data= await db.res.query(id)
  return { id, data }
}

export default function Page() {
  let { id, dataLimit } = useLoaderData()
  return (
    <div>
      <h1>url 上的id 参数: {id}h1>
      <h1>根据id 插件结果是: {data}h1>
    div>
  )
}

Next.js 支持服务器端渲染 (SSR) 、静态站点生成 (SSG) 、增量静态生成 (ISR) 和 CSR (客户端渲染) . 对比,Remix 它仅支持 SSR 和 CSR。

使用 Sessions and cookies

在 Next.js 中没有直接可以操作 cookie 的内置函数。但是像 Cookie.js 这样的流行库可以与 Next.js 或 NextAuth.js 一起使用,比如将用户身份验证数据保存在 cookie 中。

Remix 支持开箱即用的方法操作 cookie 。您可以通过调用函数来生成 cookie,然后序列化或解析数据以存储或读取它.

以下来自 Remix 的代码片段显示了如何在 Remix 中创建用于管理浏览器 cookie 的逻辑函数。

import { createCookie } from 'remix'

const cookie = createCookie('cookie-name', {
  expires: new Date(Date.now() + 60),
  httpOnly: true,
  maxAge: 60,
  path: '/',
  sameSite: 'lax',
  secrets: ['s3cret1'],
  secure: true,
})

样式

在样式方面,Remix 与 Next.js 略有不同。Remix 提供了一种内置技术,可以使用links方法动态添加样式,而 Next.js 支持 Styled-JSX 作为 CSS in JS 方案或者使用 css modules,全局样式只能写在最外层的 app.js 中

function Home() {
	return (
		<div className="container">
  	<h1>My Cart in Next.jsh1><p>Some paragraphp><style jsx>
    	{'
      .container {
        margin: 20px;
      }
      p {
        color: blue;
      }
    `}
   style>div>
 )
}

export default Home

Remix 使用一种简单的方法向页面添加样式,使用 标签 。当页面切换到该页面下自动加载样式原先页面下的样式自动删除,下面的代码片段展示了如何使用links函数以在 Remix 中加载样式表。

export function links() {
  return [
    {
      rel: 'stylesheet',
      href: 'https://test.min.css',
    },
  ]
}

通过上述代码,会自动在页面中装载和卸载 link。

表单

Next.js 非内置,需要使用 ajax 处理。

Remix 提供了内置表单功能 通过

相关文章

ASR平台:革新性技术赋能语音识别领域的创新

ASR平台:革新性技术赋能语音识别领域的创新

  语音识别技术由于其广泛应用的需求不断增长,ASR平台在此背景下应运而生。ASR(Automatic Speech Recognition,自动语音识别)平台是一种基于...

简单介绍一下自己

我是一名 90 后,12 年毕业,工作 9 年,发过传单,做过运营,也把自己当成产品经理。目前是一名小厂前端工程师,日常负责公司 2B 产品开发迭代交付,还有一些公司内部组件、脚手架维护等。这一年很少加班,调休全靠年假了 😊 。

我的 2021

完成的

除了完成开发工作之外,还完成了:

掘金后台统计

  1. 在掘金发布 12 篇文章

  2. 【全栈】第三次重构我的个人博客

  3. 【全栈】模仿在线流程图  processon.com,目前已经下线,掘金实现文章

  4. 【全栈】实现一个简易版 react 低代码平台 https://low-code.runjs.cool/, 目前只实现了视图层,后面的逻辑有些复杂,没有继续下去。

  5. https://dev.to/ 发布 1 篇

9 年小厂老前端的年终总结

前言时光飞逝,岁月如梭,转眼来到 2021 年底,这一年少了些理性,多了点感性,少了些自由,多了一份责任,这一年视乎没做什么事情,但又过得非常充实,最欣慰的是回家有个人等待着我的拥抱,最快乐的是耳边多...

人工智能 - 在未来的工作中如何扮演核心角色

人工智能 - 在未来的工作中如何扮演核心角色

  随着技术的不断进步和发展,人工智能目前不仅仅是它自身的一个领域,而且已经渗透进了人们的生活、工作等各个领域。AI的应用也变得越来越广泛,从语音识别到图像处理,在各个行业都...

人工智能培训:揭秘未来科技的智慧之路

人工智能培训:揭秘未来科技的智慧之路

  随着科技的飞速发展,人工智能已经成为改变世界的关键驱动力之一。无论是在工业生产、医疗保健、金融服务还是交通领域,人工智能的应用都取得了巨大的突破。为了满足这一需求,越来越...

人工智能对生活的改变 - 从智能家居到医疗健康

人工智能对生活的改变 - 从智能家居到医疗健康

  近年来,人工智能技术快速发展,已经深入到我们的生活中。从智能家居到医疗健康,AI的应用已经开始改变我们的生活方式,甚至可能重塑我们的社会结构。本文就从智能家居、智能医疗和...

智能机器人:将科技与人工智能融合的探索与突破

智能机器人:将科技与人工智能融合的探索与突破

  随着人工智能技术的迅猛发展,智能机器人正逐渐走进我们的生活。智能机器人中心作为一个专注于研究和开发智能机器人技术的创新实验室,致力于将人工智能与机器人技术融合,探索出更多...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。