相关文章推荐
英勇无比的红茶  ·  上海市公安局门户网站--信息评价·  2 周前    · 
风流倜傥的匕首  ·  植物與傳說(觀點種子網)·  1 月前    · 
礼貌的萝卜  ·  中国政法大学辩论队获得2018国际华语辩论邀 ...·  1 月前    · 
儒雅的绿茶  ·  唐山大地震_百度百科·  9 月前    · 
帅呆的拖把  ·  美“仿生眼镜”技术获重大突破有望使盲人恢复正 ...·  10 月前    · 
小百科  ›  将create-react-app迁移到Next.js-腾讯云开发者社区-腾讯云
软件 react config
豁达的帽子
1 年前
作者头像
前端修罗场
0 篇文章

将create-react-app迁移到Next.js

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Web 技术 > 将create-react-app迁移到Next.js

将create-react-app迁移到Next.js

作者头像
前端修罗场
发布 于 2022-07-29 07:58:57
2.7K 0
发布 于 2022-07-29 07:58:57
举报

在本文中,我将引导您完成将React应用程序(Create-React-App: CRA)迁移到Next.js所采取的步骤。

这非常简单,只需几个小时即可完成。Next.js是一个轻量级的React框架,因此它不像将橙子与苹果进行比较。虽然如此,这意味着有些事情有些不同。

循序渐进:将CRA转换为Next.js

创建一个新的Next.js项目

首先,在终端中运行此命令以创建新应用程序:

$ npx create-next-app

将组件放入Next.js项目:

在新的Next.js项目中,您必须创建一个components文件夹。对所有可重复使用的组件使用该组件。

现在,您需要将代表实际页面的组件转换为页面。这就是pages文件夹的用途。页面中的每个文件代表您网站上的一个页面。接着,将页面组件放在此处。 页面的命名约定全部为小写 。因此,您的 根页面应称为index.js 。

路由:React vs Next.js

普通的React要么呈现为真正的单页应用程序(类似于网络上的电话应用程序),要么借助路由器组件呈现路由, 而Next.js附带了内部路由机制。它将文件路径镜像到页面 ,甚至允许动态路由(如:ID)。

考虑到这一点,您 需要创建反映路由器配置的目录结构 。鉴于其受欢迎程度,您可能正在使用 react-router ,因此您可以在项目范围内搜索<Route>,然后逐个迁移它们。

随着页面设置的顺利进行,您现在需要将整个项目中的链接更改为本地链接。如前所述,Next.js附带了预先打包的路由解决方案,它们的语法略有不同。

首先,替换每次导入的React-Router链接:

import {Link} from "react-router-dom"

与 Next.js 等效:

import Link from “next/link"

现在,语法如下:

 <Link to="/destination/path">Link Caption</Link> 
 becomes <Link href="/destination/path">Link Caption</Link>.

本质上只是切换到href。

但是,如果您在链接上使用样式和CSS类,则必须多更改一些代码。

Next.js中的链接只是装饰器,并且 仅接受一个prop:href 。因此,您必须将样式和类直接放在锚标记上,并用Link装饰器将其包装起来,如下所示:

<Link href="/destination/path">
    <a className="underline test-gray-600">Link Caption</a>
 </Link>

CSS

对于每个阅读此内容的人,本节中的步骤将有所不同。有无数种CSS编写方法。它可以是一个普通的CSS文件,SASS,样式化的组件,也可以使用数千种CSS框架之一。

Install @zeit/next-sass

在项目的根目录创建一个文件next.config.js:

const withSass = require('@zeit/next-sass');
module.exports = withSass({
  webpack (config, options) {
      return config;
});

Assets:React vs Next.js

在React中,您可以直接导入资源,例如图像,矢量和字体,而在Next.js中则不需要。 首先,您必须为该类型的资源添加一个webpack加载器到next.config.js中。

对于图片文件,我正在使用 next-images 。如果已经有一个文件,只需转到next.config.js文件,或者现在在项目的根目录中创建一个文件。如果只需要创建一个配置文件,那么只需要这两行代码:

const withImages = require('next-images');
module.exports = withImages();

例如,如果您已经为选择的CSS框架提供了配置,则您可能想知道如何在此之上还使用next-images。只需将当前配置包装在其中即可。

例如,这是我的配置:

const withSass = require('@zeit/next-sass');
const withImages = require('next-images')
module.exports = withImages(withSass({
webpack (config, options) {
     return config;
}));

注入自定义脚本:

在页面目录下创建_document.js文件

导入文档:

 export default class MyDocument extends Document {
  render () {
   return (
     <html lang="en">
       <Head />
         <Main />
 
推荐文章
英勇无比的红茶  ·  上海市公安局门户网站--信息评价
2 周前
风流倜傥的匕首  ·  植物與傳說(觀點種子網)
1 月前
礼貌的萝卜  ·  中国政法大学辩论队获得2018国际华语辩论邀请赛大陆预选赛冠军_ ...
1 月前
儒雅的绿茶  ·  唐山大地震_百度百科
9 月前
帅呆的拖把  ·  美“仿生眼镜”技术获重大突破有望使盲人恢复正常视力- 中国日报网
10 月前
Link管理   ·   Sov5搜索   ·   小百科
小百科 - 百科知识指南