国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Next.js vs Remix - 開發者的困境

開發 前端
Next.js 是最流行的用于服務器端渲染的 React 框架之一。它已經存在相當長的時間了,并且提供了開發者所需的所有功能,提供了出色的開發體驗。

React 生態系統是一個繁榮的景觀,充滿了承諾革新網絡開發的框架。今天,我們將深入探討兩個流行的競爭者:Next.js 和 Remix。

Next.js 是最流行的用于服務器端渲染的 React 框架之一。它已經存在相當長的時間了,并且提供了開發者所需的所有功能,提供了出色的開發體驗。

Remix 是一個較新的參與者,由 React Router 的創始人創建。它倡導全棧開發方法,并引入了幾個創新特性。隨著 Remix 在 2022 年的開源推出,開發者開始思考哪個框架更適合他們的應用。兩者都擁有令人印象深刻的特性和充滿激情的社區,但哪一個應該成為我們下一個項目的首選呢?

讓我們分析它們的優勢和劣勢,以幫助我們選擇優勝者。

1. 路由

Next.js

Next.js 有兩種不同的路由器:App Router 和 Pages Router。App Router 是一個較新的路由器,允許我們使用 React 的最新功能,比如 Server Components 和 Streaming。Pages Router 是原始的 Next.js 路由器,它允許我們構建服務器端渲染的 React 應用程序,并繼續支持用于較舊的 Next.js 應用程序。

對于應用程序路由,Next.js 13 使用基于目錄的路由,其中任何在 /app 下的文件稱為 page.tsx 的文件都會被構建為路由。應用目錄中的文件夾可以包含用于布局的 layout.tsx,用于公開訪問該路由的 page.tsx,用于定義加載狀態的 loading.tsx,以及用于錯誤處理的 error.tsx。要創建嵌套路由,我們可以相互嵌套文件夾。

圖片圖片

路由

來源:Next.js 文檔

文件夾結構

來源:Next.js 文檔來源:Next.js 文檔

Remix

Remix v2 使用基于平面文件的路由系統。在我們的 /app/routes 文件夾中,我們可以通過添加新組件來創建新路由。使用文件名中的句點分隔符(.)來創建嵌套路由。例如,如果我們想在 Remix 應用中創建一個 /concerts/trending 路由,我們會添加一個名為 concerts.trending.tsx 的新文件。

來源:Next.js 文檔來源:Next.js 文檔

視角

現在,如果我們比較這兩個框架的路由機制,它們都選擇了基于文件系統的路由幾乎相同的方向,感覺這是正確的方式前進。

Remix 似乎更直觀,我們可以通過查看文件/布局來了解它表示的路由。但根據 Next.js,將相關的路由文件放在一個文件夾中也是有道理的,這有助于為每個路由段定義我們的加載/錯誤狀態。

2.數據獲取

Next.js

Next.js 提供了幾種數據獲取方法:

  • getServerSideProps:在每個請求期間在服務器上獲取數據。這用于服務器端渲染(SSR),在客戶端請求頁面時獲取數據。
  • getStaticProps:在構建時獲取數據,生成帶有預渲染內容的靜態 HTML 頁面。
  • getInitialProps:在服務器和客戶端上都運行,用于初始渲染和客戶端填充數據。這是一個遺留的 API。
  • fetch:Next.js 擴展了本地的 fetch Web API,允許我們配置每個在服務器上的 fetch 請求的緩存和重新驗證行為。fetch 與 async/await 可以在 Server Component* Route Handlers 和 Server Actions 中使用。
async function getUsers() {
  const res = await fetch('https://jsonplaceholder.typicode.com/users')
  if (!res.ok) {
    throw new Error('Failed to fetch data')
  }
  return res.json()
}

export default async function Page() {
  const users = await getUsers()
  return (
    <div>
      <h1>Users</h1>
      {users.map((user) => (
        <div key={user.id}>{user.name}</div>
      ))}
    </div>
  );
}

Remix

在 Remix 中,數據是在加載器中獲取的。每個路由可以定義一個加載器函數,在渲染時為路由提供相關數據。useLoaderData 將加載器的數據提供給組件。加載器僅在服務器上運行。

import { useLoaderData } from "@remix-run/react";

export const loader = async () => {
  const users = await getUsers();
  return json({ users });
};

export default function Page() {
  const users = useLoaderData<typeof loader>();
  return (
    <div>
      <h1>Users</h1>
      {users.map((user) => (
        <div key={user.id}>{user.name}</div>
      ))}
    </div>
  );
}

視角

Next.js 似乎非常適合具有靜態和動態內容混合的應用程序,其中靈活性和定制性被優先考慮。Remix 的數據獲取方法允許更精細地控制數據加載和依賴關系。

3.數據變更

處理變更時,我們通常通過向后端服務器發送 API 請求,然后更新本地狀態以反映更改。

這兩個框架的目標是通過將變更處理直接集成到其核心功能中來徹底改變變更處理方式。

Next.js

在 Next.js 13.4 之前,創建并在服務器上執行操作的唯一方法是創建 API 路由并更新狀態。

Next.js 13.4 引入了服務器動作以處理數據變更,以簡化開發者體驗并改善用戶體驗。

使用 API 路由

export default function Page() {
  async function onSubmit(event: FormEvent<HTMLFormElement>) {
    event.preventDefault();
 
    const formData = new FormData(event.currentTarget);
    const response = await fetch('/api/submit', {
      method: 'POST',
      body: formData,
    });
 
    // Handle response if necessary
    const data = await response.json();
    // ...
  }
 
  return (
    <form onSubmit={onSubmit}>
      <input type="text" name="name" />
      <button type="submit">Submit</button>
    </form>
  );
}

使用 server actions

export default function Page() {
  async function create(formData: FormData) {
    'use server';
    const id = await createItem(formData);
  }
 
  return (
    <form action={create}>
      <input type="text" name="name" />
      <button type="submit">Submit</button>
    </form>
  );
}

來自 Next.js 14 表單和變更的示例

Remix

Remix 自動將 UI 與持久服務器狀態同步。這發生在三個步驟中:

  • 路由加載器向 UI 提供數據
  • 表單提交數據到路由動作,更新持久狀態
  • 頁面上的加載器數據自動重新驗證

圖片圖片

Remix 鼓勵將用戶采取行動的每個部分都保持為 HTML 表單。每當用戶觸發表單提交時,它調用動作。一旦動作執行完畢,Remix 通過瀏覽器的 fetch 請求重新獲取該路由的所有加載器,并刷新 UI,確保 UI 始終與數據庫同步。這被稱為 Remix 的“全棧數據流”。

export async function loader({
  request,
}: LoaderFunctionArgs) {
  const user = await getUser(request);
  return json({
    displayName: user.displayName,
    email: user.email,
  });
}

export default function Component() {
  const user = useLoaderData<typeof loader>();
  return (
    <Form method="post" action="/account">
      <h1>Settings for {user.displayName}</h1>

      <input
        name="displayName"
        defaultValue={user.displayName}
      />
      <input name="email" defaultValue={user.email} />

      <button type="submit">Save</button>
    </Form>
  );
}

export async function action({
  request,
}: ActionFunctionArgs) {
  const formData = await request.formData();
  const user = await getUser(request);

  await updateUser(user.id, {
    email: formData.get("email"),
    displayName: formData.get("displayName"),
  });

  return json({ ok: true });
}

這個示例來自 Remix 路由動作文檔。

視角

  • Next.js server actions 與 React 生態系統和 React 的 API 相關聯。而 Remix 是基于 Web 平臺的功能實現的,并且與 Web 的工作方式密切相關。
  • Next.js 的動作是以組件為中心的。而 Remix 的動作是以路由為中心的,因此不像組件那樣易于組合。
  • 在 Next.js 中,我們需要手動告訴路徑重新驗證,而 Remix 則進行自動重新驗證。這些是 Next.js 和 Remix 的權衡,我們可以決定我們可以接受哪些,我們需要哪些,并相應地做出決定。

4.錯誤處理

Next.js and Remix 提供了在我們的 Web 應用程序中優雅處理錯誤的機制。

Next.js

每個路由段中都有一個獨立的 error.js 文件,用于渲染該路由段的錯誤狀態。error.js 文件約定允許我們通過自動將路由段及其嵌套子元素包裝在 React 錯誤邊界中,優雅地處理嵌套路由中的意外運行時錯誤。它處理在服務器端或瀏覽器中可能發生的意外錯誤以及如 404 等預期錯誤。

Remix

要渲染路由段的錯誤狀態,我們可以導出 ErrorBoundary。它處理在服務器端或瀏覽器中可能發生的意外錯誤以及如 404 等預期錯誤。

5.社區支持

Next.js

Next.js 是一個經過良好建立的框架,擁有 11.8 萬顆 GitHub stars(撰寫時)。它擁有龐大的社區和生態系統,在尋找解決問題、插件或集成時具有重大優勢。

Remix

Remix 在撰寫時擁有約 2.66 萬顆 GitHub stars ,并且社區正在不斷壯大。

觀點

如果應用程序不太復雜且不需要社區的太多幫助,則更喜歡 Remix。如果一個應用程序需要一個擁有更廣泛功能范圍和龐大用戶社區的框架,那么 Next.js 是一個不錯的選擇。

6.學習曲線

Next.js

相對較難學習。它提供了很多選擇,如果開發者沒有正確使用,低級別控制可能會顯得過度。

Remix

相對較簡單。它提供了一種做事情的方式,并將很多內容抽象出來。

7.部署

Next.js

在 Vercel 之外部署 Next.js 可能會有挑戰,Vercel 是一個出色的平臺,但如果我們的基礎設施在 AWS 上,則可能并不理想。將 Next.js 托管在我們的 AWS 賬戶中可以更輕松地與我們的后端集成,并且通常比在 Vercel 上更具成本效益。雖然 Next.js 沒有原生支持使用無服務器方式自托管,但我們可以將其作為 Node 應用程序運行。但是,這種方法可能無法提供與使用 Vercel 相同的好處。

幸運的是,有一個新的開源 Next.js 無服務器適配器 - OpenNext。該適配器接收 Next.js 構建輸出并將其轉換為可部署到任何函數即服務(FaaS)平臺的包,使部署更加靈活。

Kent Dodds 在他的博客中表達了對部署的擔憂。

Remix

Remix 被設計用于部署在支持 JavaScript 執行的任何平臺上。這在很大程度上是由于它專注于標準。

8.價格

Next.js

對許多人來說,Vercel 的定價似乎是一個大問題。這可能是一個重要的考慮因素。

Remix

由于 Remix 可以在支持 JavaScript 執行的任何平臺上部署,因此我們可以根據自己的選擇自由選擇平臺。

9. 與大品牌的合作

Next.js

Next.js 由 Vercel 維護。React 團隊與 Next.js 團隊密切合作,推出新功能,如 React Server Components。

Remix

Remix 在 2022 年與 Shopify 合作!在 Shopify 的支持下,Remix 獲得了來自一個成熟的商業領導者的長期支持和支持。

10. 公司

Next.js

  • Netflix Jobs
  • TikTok
  • Notion
  • Loom

詳細列表可見 https://nextjs.org/showcase。

Remix

  • NASA
  • Docker - Docker Scout 是一個統一的容器安全解決方案,旨在幫助開發人員快速識別并修復所有存儲庫中的漏洞。
  • Shopify
  • react-admin - 用于提供私有 npm 注冊表和企業用戶儀表板。

詳細列表可見 https://remix.run/showcase。

那么,誰會獲得冠軍呢?

獲勝者是…

平局!Next.js 和 Remix 在不同領域都表現出色。

然而,“最佳”框架取決于項目的獨特需求:

對于:大型項目、功能豐富的框架、以及擁有廣泛支持的快速勝利 - Next.js 可能是冠軍。

對于:性能關鍵項目、流暢的用戶體驗、解決較不復雜的問題以及愿意探索現代方法 - Remix 可能是冠軍。

記?。?/p>

這兩個框架都擁有活躍的社區和不斷增長的資源池。親身實驗至關重要。使用每個框架構建小型項目,以發現個人適合性。團隊的技能和偏好很重要。選擇與團隊開發風格相符的框架。

本文翻譯自 https://blog.saeloun.com/2024/02/21/next.js-vs-remix。

責任編輯:武曉燕 來源: 編程界
相關推薦

2024-03-04 07:33:39

RemixReact框架

2021-11-26 10:29:24

jsRemix開源

2024-09-18 00:00:01

ChatGPTOpenAI工具型

2023-09-17 12:21:21

RemixNext.js

2022-02-22 20:48:48

RemixNext.js框架

2021-11-29 09:12:44

Next.js Remix 開源

2025-01-22 07:20:00

2025-03-31 00:00:02

2012-06-13 01:23:30

開發者程序員

2024-05-09 09:01:03

2023-11-07 11:47:59

2013-01-17 13:06:47

移動開發者營銷推廣

2024-12-16 08:40:51

2011-04-27 09:34:18

Android盈利困境Android

2025-07-24 08:32:39

2022-08-22 08:05:17

Fresh框架Remix

2024-12-13 08:37:32

2025-11-10 01:00:00

2025-02-03 00:00:35

2015-08-21 10:11:32

游戲開發者辛苦困境
點贊
收藏

51CTO技術棧公眾號

视频亚洲一区二区| 先锋在线亚洲| 欧美日韩伦理一区二区| 欧美日本在线观看| aa免费在线观看| 国产a亚洲精品| 国产传媒一区在线| 亚洲人成绝费网站色www| 在线免费观看色| 亚洲一区二区三区中文字幕在线| 日本一区二区三区视频在线观看 | 日韩av观看网址| 伊人久久一区| 亚洲欧美999| 小视频免费在线观看| 夜夜精品视频一区二区| 福利在线白白| 日本在线不卡视频| 成人中文字幕+乱码+中文字幕| 要久久电视剧全集免费| 欧美不卡视频一区发布| 91蜜桃臀久久一区二区| 久久久久久国产精品久久| 老牛影视av一区二区在线观看| 欧美精品成人91久久久久久久| av电影资源| 偷窥少妇高潮呻吟av久久免费| 午夜影院韩国伦理在线| 国产欧美一区二区精品仙草咪| 大肉大捧一进一出好爽视频| 国产精一区二区三区| 岛国视频一区免费观看| 国产精品一区二区美女视频免费看 | 岛国成人毛片| 欧美午夜电影网| eeuss影院www在线播放| 日本一区二区三区视频在线观看| 秋霞av亚洲一区二区三| 日韩美女福利视频| 久久久人成影片免费观看| 国产亚洲二区| 日韩母乳在线| 亚洲精品日产aⅴ| 韩国三级在线一区| 欧美日韩一区二区三区电影| www.成人在线| 久久久久久久久久久久久久久久久久久 | 亚洲日产av中文字幕| 国产日产欧美精品| av亚洲精华国产精华精| 免费一级在线观看播放网址| 欧美裸体xxxx极品少妇| 日本黄色免费在线| 色综合天天综合网天天狠天天| 欧美aaa一级片| 色综合久久久久综合99| 日本黄色成人| 亚洲自拍偷拍二区| 色久优优欧美色久优优| 粉嫩91精品久久久久久久99蜜桃 | 欧美日韩视频免费在线观看| 一区二区三区在线不卡| 国产成人毛片| 久青草视频在线播放| 宅男在线国产精品| 亚洲一区二区免费看| 亚洲日本理论电影| 精品久久国产字幕高潮| 日韩美香港a一级毛片| 国产日本欧美一区二区三区在线| jlzzjlzz亚洲日本少妇| 成人免费图片免费观看| 欧美精品做受xxx性少妇| 国产一区二区精品在线观看| 国产肉体ⅹxxx137大胆| 欧美日韩电影一区| 外国成人激情视频| 国产原创popny丨九色| 亚洲国产精品久久艾草纯爱 | 在线电影欧美成精品| 日韩有码一区| 羞羞视频立即看| 另类图片亚洲另类| 国产精品99久久久| 一本大道色婷婷在线| 国产成人精品日本亚洲| 久久久精品免费网站| 精品网站在线| 日本人体一区二区| 国产精品免费视频观看| 九九热这里有精品| 色之综合天天综合色天天棕色| 亚洲视频每日更新| av基地在线| 日韩av免费看网站| 国产宾馆实践打屁股91| xxx.xxx欧美| www在线观看免费| 国模吧一区二区三区| 一区二区三区在线不卡| 日韩欧美2区| 九九九在线观看视频| 国产91九色视频| 日本黄色一区二区| 国内一区二区视频| 国产一区二区三区不卡av| 久久精品国产sm调教网站演员| 日韩电影免费观看中文字幕 | 91久热免费在线视频| 成人黄色av电影| 国产精品一区二区99| 国产xxxxx在线观看| 5566av亚洲| 日韩精品在线看片z| 蜜臀精品久久久久久蜜臀 | 欧美色中文字幕| 欧美激情日韩| 国产精品中文| 黄视频在线播放| 91蝌蚪视频在线观看| 人禽交欧美网站免费| 国自产精品手机在线观看视频| 欧美一区二区在线免费观看| 日韩av网站免费在线| 要久久电视剧全集免费| 性xxxxfjsxxxxx欧美| 欧美经典一区二区三区| 欧美伊人亚洲伊人色综合动图| 国产一级黄色电影| 国产精品video| 欧美三级韩国三级日本一级| 亚洲欧美综合| 制服丝袜专区在线| 无码人妻精品一区二区三区在线| 国产成人+综合亚洲+天堂| 亚洲一区在线免费观看| 欧美国产综合色视频| 成人激情在线| 狠狠操一区二区三区| 日韩在线一区二区三区免费视频| 午夜精品久久久久久久久久久 | 亚洲美女喷白浆| 欧美成人r级一区二区三区| 欧美美女一区二区| 在线免费观看视频一区| 午夜成人免费电影| 欧美性黄网官网| 91精品国产欧美一区二区18| 欧美三级欧美一级| 欧美一区二区女人| 国产性猛交xxxx免费看久久| 久久这里只有精品99| 日韩欧美在线视频日韩欧美在线视频 | 国产午夜精品全部视频在线播放| 亚洲精品黄色| 91在线成人| 屁屁影院在线观看| 成人影片在线播放| 亚洲国产视频直播| 黄色av一区| 九七影院97影院理论片久久 | 26uuu欧美| 国产一区视频导航| 国产精品不卡一区| 99精品久久久久久| 国产高清在线精品| 极品少妇xxxx偷拍精品少妇| 亚洲天堂av在线| 午夜av在线播放| 在线中文字幕电影| 久久99亚洲网美利坚合众国| 欧美日韩亚洲国产| 亚瑟国产精品| 国产亚洲亚洲国产一二区| 凹凸成人在线| 欧美日韩在线大尺度| 久草在线中文最新视频| 二区三区四区高清视频在线观看| 久久美女精品| 新版中文字幕在线资源| 奇米777日韩| 午夜视频一区在线观看| 午夜精品美女久久久久av福利| 一级毛片免费观看| 国产精品一二| 国产91色在线免费| av免费在线免费| 日本在线播放一区二区三区| 久久人体大胆视频| 成年人看的毛片| 国产精品三p一区二区| 国产一区二区毛片| 这里只有精品在线观看| 亚洲 日韩 国产第一区| 中文字幕有码在线观看| 日本大胆欧美人术艺术动态| 精品视频偷偷看在线观看| 国产色视频在线播放| 97国产精品| 日韩一区二区精品在线观看|