说实话,我我的仍是以为文笔愈来愈不错了,之前的文章都是一个问题闷到天黑,文章写的有点乱因为文章过于庞大致使不是一鼓作气的,思路有时候会很混乱。因此我也准备开始写系列文,哈哈,尝试一下嘛~系列文的好处就是每次讲一个点,争取讲的细致一些,但愿你们多多指教~php
笔者小白技术栈目前主要是react,全家桶里react,react-router,redux等用的差很少了,最近想攻关一下服务端渲染(SSR),提到服务端渲染,一大堆繁琐的webpack配置,后端路由配置等等等等搞得我头大,烦的不行。我这我的不是很喜欢接触新东西,可能每一个人学习方式不一样,我喜欢先会用一个东西,用明白了再去研究它的原理,所以,有没有相似于一键配置或者傻瓜式配置的服务端渲染框架脚手架呢,秉着这个理念,百度了一下就是——Next.js了。html
本人很是喜欢create-react-app这个脚手架,可是官方明确代表了目前不支持服务端渲染,因此只好放弃了,其实基于这个脚手架也是能够配置的,不过我仍是先弄一个可用的,而后回来再填坑本身配置吧~
先来讲一下服务端渲染吧,目前作的项目确实是服务端渲染的,可是不是我搭的,我我的写的一些东西都不是服务端渲染的,因此下面的结论是不少篇文章事后总结的,具体文章在下面,知识这东西就是拿来分享学习的嘛,学会了就是个人~哈哈前端
最原始的前端,页面在浏览器获取到JavaScript和CSS等文件以后开始渲染,彻底在客户端(也就是浏览器),路由是客户端路由,也就是如今大部分的SPA单页应用。node
页面由服务端渲染事后直接返回html页面给前端,url的变动会刷新整个页面,也就是之前的php和jsp模式react
高端点的词Universal APP,为何要同构,由于客户端渲染存在一个缺点,就是首屏加载过大文件或过多文件会变得特别慢,所以能够把首屏放在客户端来渲染来提高首屏速度,首屏加载事后路又开始交给客户端控制,又变成了SPA应用,整个代码都是用JavaScript来编写,服务端采用nodejs。webpack
关于Next.js,我就很少BB了,我写这篇文章的同时也是我第一次接触Next.js因此才叫采坑入门,你们感兴趣的能够去官网学学,还挺详细的 ---> Next.jsgit
学习编程的咱们都知道,入门系列是hello world,这里我以为next.js仍是挺友好的,由于它真的免除了咱们平时所理解的服务端渲染的各类繁杂配置,只须要简单的几步就能够新建一个Universal App。github
好吧,你只须要新建一个文件夹,而后运行下面一段命令web
// 初始化应用 yarn init // 安装三个依赖 yarn add react react-dom next // package.json配置启动 { ... // 新增启动方式,选择使用next启动 "script": { "dev": "next" } ... }
OK,你已经完成了基于next的服务端搭建,是否是真的很简单。
接下来咱们运行一下yarn dev
。编程
what?竟然报错了,好吧,原来Next.js默认从 pages 目录下取页面进行渲染返回给前端展现,并默认取 pages/index.js 做为系统的首页进行展现。所以,咱们须要新建一个pages目录。接下在再从新启动一下试试。
由于3000常常被另外一个项目使用,因此我把启动端口改为3006了,修改script的启动方式便可:
"script": { "dev": "next -p 3006" }
而后咱们访问http://localhost:3006:
ok,获得了一个很是简洁的一个页面,讲道理,我很喜欢这种简洁的页面。为啥404了呢,原来咱们只新建了pages目录,刚刚也说了,它默认根路由页面是pages下的index.js,因此咱们新建一个index.js。
const Home = () => ( <h1>我是Next的首页</h1> ); export default Home;
ok,如今就没啥问题了。由于next.js默认开启服务端渲染,也就无需咱们进行任何的配置,所以如今这个极其简单的应用就是一个Universal React APP。从页面元素咱们也能够看出来:
看到这里,新手小伙伴应该跟我同样感叹Next.js强大的同时也会有一个疑问,等一下,怎么就渲染了?路由你都没配置凭啥就出首页了,通常的SPA至少也会配置路由才能进行页面跳转,这里没配置路由首页出来了我还有其余页面呢,怎么办?
原来,这些东西还都是Next给咱们配置好的,刚才说了Next.js默认匹配pages目录的index.js做为根路径/,其余的路径也是这样按文件名匹配的。
而咱们的各类路由跳转依赖的再也不是react-router而是next.js给咱们封装好的路由(其实redux也是,后面会说到)。
/pages/index.js页面 ----> / import React, { Fragment } from 'react'; import Link from 'next/link'; const Home = () => ( <Fragment> <h1>我是Next的首页</h1> <Link href='/userList'> <a>用户列表页</a> </Link> </Fragment> ); export default Home;
/pages/userList.js ----> /userList const UserList = () => ( <h2>我是用户列表页</h2> ); export default UserList;
厉害了个人哥,不只跳转成功,并且对应的history也都帮咱们封装好了,后退也都正常,并且能够看到,咱们无需在前端或者node端配置任何路由相关,只须要按照它的模板去写就能够了。而且前端页面的跳转也是无刷新的~
不过萝卜白菜各有所爱,虽然我的以为很强大可是看不到路由仍是感受怪怪的,并且写法也有变化,也就是路由必须在pages路径下才能够,这样工程大了之后岂不是会很混乱,并且页面和路由融合在一块儿redux怎么办,感受很臃肿啊,做为一个刚从纯前端SPA过分过来的确定很别扭,我以为不可能这么low吧,确定不会吧,稍后再探索吧。