问答
这个产品可以用于生产环境吗?
https://zeit.co 都是一直用 Next.js 写的。
它的开发体验和终端用户体验都很好,所以我们决定开源出来给大家共享。
体积多大?
客户端大小根据应用需求不一样大小也不一样。
一个最简单 Next 应该用 gzip 压缩后大约65kb
这个像 create-react-app
?
是或不是.
是,因为它让你的 SSR 开发更简单。
不是,因为它规定了一定的目录结构,使我们能做以下更高级的事:
- 服务端渲染
- 自动代码分割
此外,Next.js 还提供两个内置特性:
- 路由与懒加载组件: (通过引入 next/link)
- 修改的组件: (通过引入 next/head)
如果你想写共用组件,可以嵌入 Next.js 应用和 React 应用中,推荐使用create-react-app
。你可以更改import
保持代码清晰。
怎么解决 CSS 嵌入 JS 问题?
Next.js 自带styled-jsx库支持 CSS 嵌入 JS。而且你可以选择其他嵌入方法到你的项目中,可参考文档as mentioned before。
哪些语法会被转换?怎么转换它们?
我们遵循 V8 引擎的,如今 V8 引擎广泛支持 ES6 语法以及async
和await
语法,所以我们支持转换它们。但是 V8 引擎不支持修饰器语法,所以我们也不支持转换这语法。
为什么使用新路由?
Next.js 的特别之处如下所示:
- 路由不需要被提前知道
- 路由总是被懒加载
顶层组件可以定义生命周期getInitialProps来阻止路由加载(当服务端渲染或路由懒加载时)
因此,我们可以介绍一个非常简单的路由方法,它由下面两部分组成:每个顶层组件都将会收到一个url对象,来检查 url 或修改历史记录
<link/>
组件用于包装如(<a>
)标签的元素容器,来执行客户端转换。
我们使用了些有趣的场景来测试路由的灵活性,例如,可查看nextgram。
我怎么定义自定义路由?
我们通过请求处理来添加任意 URL 与任意组件之前的映射关系。
在客户端,我们<Link>
组件有个属性as
,可以装饰改变获取到的 URL。
怎么获取数据?
这由你决定。getInitialProps
是一个异步函数async
(也就是函数将会返回个Promise
)。你可以在任意位置获取数据。
我可以使用 GraphQL 吗?
是的! 这里有个例子Apollo.
我可以使用 Redux 吗?
是的! 这里有个例子
我可以在 Next 应用中使用我喜欢的 Javascript 库或工具包吗?
从我们第一次发版就已经提供很多例子,你可以查看这些例子。
什么启发我们做这个?
我们实现的大部分目标都是通过 Guillermo Rauch 的Web 应用的7原则来启发出的。
PHP 的易用性也是个很好的灵感来源,我们觉得 Next.js 可以替代很多需要用 PHP 输出 HTML 的场景。
与 PHP 不同的是,我们得利于 ES6 模块系统,每个文件会输出一个组件或方法,以便可以轻松的导入用于懒加载和测试
我们研究 React 的服务器渲染时并没有花费很大的步骤,因为我们发现一个类似于 Next.js 的产品,React 作者 Jordan Walke 写的react-page (现在已经废弃)