」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何將 Next.js 應用程式轉換為 React.js

如何將 Next.js 應用程式轉換為 React.js

發佈於2024-11-08
瀏覽:138

How to Convert a Next.js Application to React.js

如果您使用 Next.js 建立了一個 Web 應用程序,但現在需要將其轉換為純 React.js 應用程序,那麼您並不孤單。無論是出於簡單性、特定專案需求還是對客戶端渲染的偏好,只要有正確的指導,從 Next.js 轉換到 React 都可以很簡單。在本文中,我將引導您完成 將 Next.js 應用程式轉換為 React.js 的步驟,確保平穩過渡,同時保持應用程式的核心功能。

注意: 如果您希望將 React.js 應用程式轉換為 Next.js,請查看我的另一篇關於如何將 React.js 轉換為 Next.js 的文章。

為什麼要將 Next.js 轉換為 React.js?

Next.js 是一個出色的框架,它提供伺服器端渲染 (SSR)、靜態網站產生 (SSG) 以及許多其他開箱即用的功能。但是,這些功能對於較小的專案來說可能有點過分,或者如果您喜歡使用 React.js 進行客戶端渲染 (CSR),則這些功能可能是不必要的。轉換為 React.js 可以簡化您的建置流程,減少伺服器依賴性,並讓您更好地控制應用程式的架構。

了解差異

在深入了解轉換過程之前,有必要了解 Next.js 和 React.js 之間的主要區別:

  • 伺服器端渲染與客戶端渲染: Next.js 支援 SSR 和 SSG,而 React.js 主要用於 CSR。
  • 路由: Next.js 有一個內建的基於檔案的路由系統。在 React.js 中,您需要使用像 React Router 這樣的函式庫。
  • API 路由: Next.js 讓您在同一專案中建立 API 路由。在 React.js 中,您通常會分離前端和後端。

將 Next.js 轉換為 React.js 的步驟

讓我們開始了解如何將 Next.js 應用程式轉換為 React.js 的逐步指南。

1. 設定一個新的 React.js 應用程式

首先,使用 Create React App (CRA) 或 Vite 等工具建立一個新的 React.js 專案。

使用 Create React App:

npx create-react-app my-react-app
cd my-react-app

使用Vite:

npm init vite@latest my-react-app --template react
cd my-react-app
npm install

2. 轉移依賴

將依賴項和 devDependency 從 Next.js 專案的 package.json 複製到新的 React.js 專案的 package.json。運行npm install或yarn install來安裝它們。

3. 遷移元件和頁面

將 Next.js 元件和頁面目錄的內容複製到 React.js 專案的 src 目錄中。由於 Next.js 使用頁面目錄進行路由,因此您需要調整此結構。

4. 使用React Router實現路由

Next.js 依照頁面目錄自動處理路由。在 React.js 中,您需要手動設定路由。

安裝 React Router:

npm install react-router-dom

在 src/App.js 中設定路由:

import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'
import Home from './Home'
import About from './About'
// Import other components as needed

function App() {
  return (
    
      
        } />
        } />
        {/* Add other routes */}
      
    
  )
}

export default App

5. 調整資料取得方式

在 Next.js 中,資料取得是使用 getServerSideProps、getStaticProps 或 getInitialProps 完成的。在 React.js 中,您需要在元件內處理資料獲取,通常使用 useEffect 和 useState。

例子:

import { useState, useEffect } from 'react'

function Home() {
  const [data, setData] = useState([])

  useEffect(() => {
    fetch('/api/data') // Update the API endpoint as needed
      .then((response) => response.json())
      .then((data) => setData(data))
  }, [])

  return 
{/* Render your data */}
} export default Home

6. 處理API路由

如果您的 Next.js 應用程式使用pages/api目錄中的API路由,您需要將它們遷移到單獨的後端服務或調整您的前端以從外部API取得。

選項:

  • 建立單獨的後端:使用 Node.js、Express 或任何後端框架來設定 API 端點。
  • 使用外部 API:如果可能,調整您的前端以直接使用外部 API。

7. 更新環境變數

Next.js 使用以 NEXT_PUBLIC_ 為前綴的環境變數作為客戶端變數。在 React.js 中,在專案的根目錄下建立一個 .env 文件,並使用 REACT_APP_ 作為變數前綴。

例子:

REACT_APP_API_URL=https://api.example.com

使用 process.env.REACT_APP_API_URL 在程式碼中存取它們。

8. 刪除 Next.js 特定配置

刪除任何 Next.js 特定配置,例如 next.config.js。另外,刪除不再需要的任何特定於 Next.js 的匯入或套件。

9. 測試您的應用程式

運行您的 React.js 應用程式以確保一切按預期工作。

npm start

檢查每條路線和功能以驗證轉換是否成功。

結論

將 Next.js 應用程式轉換為 React.js 涉及設定一個新的 React 專案並遷移元件、調整路由以及以不同方式處理資料擷取。雖然 Next.js 提供了許多強大的功能,但純 React.js 應用程式提供了簡單性和靈活性,特別是對於不需要伺服器端渲染的專案。

按照本指南了解如何將 Next.js 轉換為 React.js,您應該可以實現無縫轉換。

感謝您的閱讀!如果您有興趣反其道而行之,請查看我關於如何將 React.js 應用程式轉換為 Next.js 的文章。有關新項目或文章的更多更新,請在 Twitter 上關注我:@jake_prins。

版本聲明 本文轉載於:https://dev.to/jakeprins/how-to-convert-a-nextjs-application-to-reactjs-858?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-05-02
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-05-02
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-05-02
  • 在GO中構造SQL查詢時,如何安全地加入文本和值?
    在GO中構造SQL查詢時,如何安全地加入文本和值?
    在go中構造文本sql查詢時,在go sql queries 中,在使用conting and contement和contement consem per時,尤其是在使用integer per當per當per時,per per per當per. [&​​&&&&&&&&&&&&&&&默元組方法在...
    程式設計 發佈於2025-05-02
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    在Java 中,以全屏幕獨立模式運行Java應用程序時,通常無法按期望的工作可能無法使用JAVA應用程序時,將用戶輸入在Java ProblemPassive rendering mode allows the use of KeyListener and ActionListener inter...
    程式設計 發佈於2025-05-02
  • Python不會對超範圍子串切片報錯的原因
    Python不會對超範圍子串切片報錯的原因
    在python中用索引切片範圍:二重性和空序列索引單個元素不同,該元素會引起錯誤,切片在序列的邊界之外沒有。 這種行為源於索引和切片之間的基本差異。索引一個序列,例如“示例” [3],返回一個項目。但是,切片序列(例如“示例” [3:4])返回項目的子序列。 索引不存在的元素時,例如“示例” [9...
    程式設計 發佈於2025-05-02
  • CSS可以根據任何屬性值來定位HTML元素嗎?
    CSS可以根據任何屬性值來定位HTML元素嗎?
    靶向html元素,在CSS 中使用任何屬性值,在CSS中,可以基於特定屬性(如下所示)基於特定屬性的基於特定屬性的emants目標元素: 字體家庭:康斯拉斯(Consolas); } 但是,出現一個常見的問題:元素可以根據任何屬性值而定位嗎?本文探討了此主題。 的目標元素有任何任何屬性值,...
    程式設計 發佈於2025-05-02
  • 在Java中如何為PNG文件添加坐標軸和標籤?
    在Java中如何為PNG文件添加坐標軸和標籤?
    如何用java 在現有png映像中添加軸和標籤的axes和labels如何註釋png文件可能具有挑戰性。與其嘗試可能導致錯誤和不一致的修改,不如建議在圖表創建過程中集成註釋。 使用JFReechArt import java.awt.color; 導入java.awt.eventqueue; 導...
    程式設計 發佈於2025-05-02
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中3個Party Package將另一個PAXPANCE帶有導入式套件之間的另一個軟件包,並在導入式套件之間導入另一個軟件包。如迴聲消息所證明的那樣: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    程式設計 發佈於2025-05-02
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-05-02
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    程式設計 發佈於2025-05-02
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-05-02
  • Python中嵌套函數與閉包的區別是什麼
    Python中嵌套函數與閉包的區別是什麼
    嵌套函數與python 在python中的嵌套函數不被考慮閉合,因為它們不符合以下要求:不訪問局部範圍scliables to incling scliables在封裝範圍外執行範圍的局部範圍。 make_printer(msg): DEF打印機(): 打印(味精) ...
    程式設計 發佈於2025-05-02
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-05-02
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    程式設計 發佈於2025-05-02

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3