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

sxkk20082年前知识分享223

前言

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 提供了内置表单功能 通过

相关文章

实现一个编辑器

为了弥补 markdown 的缺点,我使用 mdx 来实现编辑器的功能, mdx 也就是 markdown 语法和 JSX 的结合,关于 MDX 的优势大家可以看下这篇文章

其实最简易的 demo 也是来自于官网的 playground

MDX playground

微信排版工具新选择

MDX Editor 一个好用的排版编辑器前言哈喽,大家好,我是Ai知识分享,去年年底,我开通了微信公众号“JS 酷”,也开始陆陆续续开始写文章, 发到微信公众号,作为一名程序员,我酷爱 Markdo...

红外AI技术-用得越来越普遍

红外AI技术-用得越来越普遍

  红外AI技术在目前的智能化进程中起着越来越重要的作用。红外传感器寻找到人类体表的温度分布,判断人的存在或活动状态,接着机器学习算法进行人体识别,从而实现对人体的监控识别及...

百度API接口平台:让创新触手可及

百度API接口平台:让创新触手可及

  在当今信息化的时代,随着人工智能的迅猛发展,对于开发者而言,接入强大的API接口已成为创新的核心。作为国内首屈一指的技术服务提供商,百度API接口平台(Baidu A...

人工智能技术:引领未来智能创新的关键驱动力

人工智能技术:引领未来智能创新的关键驱动力

  在当今科技快速发展的时代,人工智能(AI)技术成为了引领未来智能革命的关键驱动力。人工智能的发展已经深入到各个领域,从医疗保健到金融服务,从交通运输到社交媒体,它正在极大...

AI人工智能网站的重要性及应用领域:连接世界的知识和信息平台

AI人工智能网站的重要性及应用领域:连接世界的知识和信息平台

  随着科技的不断发展,人工智能(AI)正逐渐渗透到我们生活的方方面面。AI技术的普及使得各类AI人工智能网站成为了人们获取信息、进行交流和实现自我提升的重要平台。在这篇文章...

人工智能改变生活?这些领域正在被AI悄然渗透

人工智能改变生活?这些领域正在被AI悄然渗透

  人工智能(Artificial Intelligence,AI)作为当今最热门的技术领域之一,正在对人类的生活产生越来越深远的影响。从智能家居到医疗保健,从工业制造到...

发表评论    

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