@2fn/dashboard 中文文档教程
该项目是通过Create Next App 引导的。
在此处找到本指南的最新版本. 并查看 Next.js 存储库 以获取最新信息。
Table of Contents
- Questions? Feedback?
- Folder Structure
- Available Scripts
- npm run dev
- npm run build
- npm run start
- Using CSS
- Adding Components
- Fetching Data
- Custom Server
- Syntax Highlighting
- Using the
static
Folder - Deploy to Now
- Something Missing?
Questions? Feedback?
查看 Next.js FAQ & 文档 或让我们知道您的反馈。
Folder Structure
创建应用程序后,它应该看起来像:
.
├── README.md
├── components
│ ├── head.js
│ └── nav.js
├── next.config.js
├── node_modules
│ ├── [...]
├── package.json
├── pages
│ └── index.js
├── static
│ └── favicon.ico
└── yarn.lock
Next.js 中的路由是基于文件系统的,所以 ./pages/index.js
映射到 /
路由和 ./pages/about.js
将映射到 /about
。
./static
目录映射到 next
服务器中的 /static
,因此您可以将所有 其他静态资源,例如图像或已编译的 CSS。
开箱即用,我们得到:
- Automatic transpilation and bundling (with webpack and babel)
- Hot code reloading
- Server rendering and indexing of
./pages
- Static file serving.
./static/
is mapped to/static/
阅读更多关于 Next's Routing
Available Scripts
在项目目录中,您可以运行:
npm run dev
运行应用处于开发模式。
在浏览器中打开http://localhost:3000即可查看。
如果您进行编辑,页面将重新加载。
您还将在控制台中看到任何错误。
npm run build
将用于生产的应用构建到 .next
文件夹。
它在生产模式下正确地捆绑了 React,并优化了构建以获得最佳性能。
npm run start
以生产模式启动应用程序。 应首先使用“next build”编译应用程序。
有关详细信息,请参阅 Next 文档中有关部署 的部分。
Using CSS
styled-jsx
与 next 捆绑在一起,以提供对独立作用域 CSS 的支持。 目的是支持类似于 Web Components 的“shadow CSS”,不幸的是 不支持服务器渲染并且仅支持 JS< /a>。
export default () => (
<div>
Hello world
<p>scoped!</p>
<style jsx>{`
p {
color: blue;
}
div {
background: red;
}
@media (max-width: 600px) {
div {
background: blue;
}
}
`}</style>
</div>
)
详细了解 Next 的 CSS 功能。
Adding Components
我们建议将 React 组件保存在 ./components
中,它们应该如下所示:
./components/simple.js
const Simple = () => <div>Simple Component</div>
export default Simple // don't forget to export default!
./components/complex.js
import { Component } from 'react'
class Complex extends Component {
state = {
text: 'World'
}
render() {
const { text } = this.state
return <div>Hello {text}</div>
}
}
export default Complex // don't forget to export default!
Fetching Data
您可以使用 getInitialProps
在 pages
组件中获取数据,如下所示:
./pages/stars.js
const Page = props => <div>Next stars: {props.stars}</div>
Page.getInitialProps = async ({ req }) => {
const res = await fetch('https://api.github.com/repos/zeit/next.js')
const json = await res.json()
const stars = json.stargazers_count
return { stars }
}
export default Page
对于初始页面加载,getInitialProps
将仅在服务器上执行。 getInitialProps
只会在客户端通过 Link
组件或使用路由 API 导航到不同的路由时执行。
注意:getInitialProps
不能在子组件中使用。 仅在页面
中。
阅读有关获取数据的更多信息和组件生命周期
Custom Server
想要使用自定义服务器启动新应用程序吗? 运行 create-next-app --example customer-server custom-app
通常,您使用 next start
启动下一个服务器。 但是,可以以编程方式 100% 启动服务器以自定义路由、使用路由模式等
。此示例使 /a
解析为 ./pages/b
,和 /b
解析为 ./pages/a
:
const { createServer } = require('http')
const { parse } = require('url')
const next = require('next')
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare().then(() => {
createServer((req, res) => {
// Be sure to pass `true` as the second argument to `url.parse`.
// This tells it to parse the query portion of the URL.
const parsedUrl = parse(req.url, true)
const { pathname, query } = parsedUrl
if (pathname === '/a') {
app.render(req, res, '/b', query)
} else if (pathname === '/b') {
app.render(req, res, '/a', query)
} else {
handle(req, res, parsedUrl)
}
}).listen(3000, err => {
if (err) throw err
console.log('> Ready on http://localhost:3000')
})
})
然后,将您的 start
脚本更改为 NODE_ENV=production node server.js< /代码>。
阅读有关自定义服务器和路由
Syntax Highlighting
的更多信息要在您最喜欢的文本编辑器中配置语法突出显示,前往相关的 Babel 文档页面并按照说明进行操作。 涵盖了一些最受欢迎的编辑器。
Deploy to Now
now 提供零配置单命令部署。
通过推荐的桌面工具或通过带有
npm install 的节点安装
now
命令行工具 - g 现在。从您的项目目录运行
现在
。 您将在输出中看到一个 now.sh URL,如下所示:> Ready! https://your-project-dirname-tpspyhtdtk.now.sh (copied to clipboard)
构建完成后将该 URL 粘贴到您的浏览器中,您将看到已部署的应用程序。
您可以在now
此处 找到更多详细信息。
Something Missing?
如果您对我们如何改进本自述文件或一般项目有任何想法,请让我们知道或< a href="https://github.com/segmentio/create-next-app/edit/master/lib/templates/default/README.md">贡献一些!
This project was bootstrapped with Create Next App.
Find the most recent version of this guide at here. And check out Next.js repo for the most up-to-date info.
Table of Contents
- Questions? Feedback?
- Folder Structure
- Available Scripts
- npm run dev
- npm run build
- npm run start
- Using CSS
- Adding Components
- Fetching Data
- Custom Server
- Syntax Highlighting
- Using the
static
Folder - Deploy to Now
- Something Missing?
Questions? Feedback?
Check out Next.js FAQ & docs or let us know your feedback.
Folder Structure
After creating an app, it should look something like:
.
├── README.md
├── components
│ ├── head.js
│ └── nav.js
├── next.config.js
├── node_modules
│ ├── [...]
├── package.json
├── pages
│ └── index.js
├── static
│ └── favicon.ico
└── yarn.lock
Routing in Next.js is based on the file system, so ./pages/index.js
maps to the /
route and ./pages/about.js
would map to /about
.
The ./static
directory maps to /static
in the next
server, so you can put all your other static resources like images or compiled CSS in there.
Out of the box, we get:
- Automatic transpilation and bundling (with webpack and babel)
- Hot code reloading
- Server rendering and indexing of
./pages
- Static file serving.
./static/
is mapped to/static/
Read more about Next's Routing
Available Scripts
In the project directory, you can run:
npm run dev
Runs the app in the development mode.
Open http://localhost:3000 to view it in the browser.
The page will reload if you make edits.
You will also see any errors in the console.
npm run build
Builds the app for production to the .next
folder.
It correctly bundles React in production mode and optimizes the build for the best performance.
npm run start
Starts the application in production mode. The application should be compiled with `next build` first.
See the section in Next docs about deployment for more information.
Using CSS
styled-jsx
is bundled with next to provide support for isolated scoped CSS. The aim is to support "shadow CSS" resembling of Web Components, which unfortunately do not support server-rendering and are JS-only.
export default () => (
<div>
Hello world
<p>scoped!</p>
<style jsx>{`
p {
color: blue;
}
div {
background: red;
}
@media (max-width: 600px) {
div {
background: blue;
}
}
`}</style>
</div>
)
Read more about Next's CSS features.
Adding Components
We recommend keeping React components in ./components
and they should look like:
./components/simple.js
const Simple = () => <div>Simple Component</div>
export default Simple // don't forget to export default!
./components/complex.js
import { Component } from 'react'
class Complex extends Component {
state = {
text: 'World'
}
render() {
const { text } = this.state
return <div>Hello {text}</div>
}
}
export default Complex // don't forget to export default!
Fetching Data
You can fetch data in pages
components using getInitialProps
like this:
./pages/stars.js
const Page = props => <div>Next stars: {props.stars}</div>
Page.getInitialProps = async ({ req }) => {
const res = await fetch('https://api.github.com/repos/zeit/next.js')
const json = await res.json()
const stars = json.stargazers_count
return { stars }
}
export default Page
For the initial page load, getInitialProps
will execute on the server only. getInitialProps
will only be executed on the client when navigating to a different route via the Link
component or using the routing APIs.
Note: getInitialProps
can not be used in children components. Only in pages
.
Read more about fetching data and the component lifecycle
Custom Server
Want to start a new app with a custom server? Run create-next-app --example customer-server custom-app
Typically you start your next server with next start
. It's possible, however, to start a server 100% programmatically in order to customize routes, use route patterns, etc
This example makes /a
resolve to ./pages/b
, and /b
resolve to ./pages/a
:
const { createServer } = require('http')
const { parse } = require('url')
const next = require('next')
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare().then(() => {
createServer((req, res) => {
// Be sure to pass `true` as the second argument to `url.parse`.
// This tells it to parse the query portion of the URL.
const parsedUrl = parse(req.url, true)
const { pathname, query } = parsedUrl
if (pathname === '/a') {
app.render(req, res, '/b', query)
} else if (pathname === '/b') {
app.render(req, res, '/a', query)
} else {
handle(req, res, parsedUrl)
}
}).listen(3000, err => {
if (err) throw err
console.log('> Ready on http://localhost:3000')
})
})
Then, change your start
script to NODE_ENV=production node server.js
.
Read more about custom server and routing
Syntax Highlighting
To configure the syntax highlighting in your favorite text editor, head to the relevant Babel documentation page and follow the instructions. Some of the most popular editors are covered.
Deploy to Now
now offers a zero-configuration single-command deployment.
Install the
now
command-line tool either via the recommended desktop tool or via node withnpm install -g now
.Run
now
from your project directory. You will see a now.sh URL in your output like this:> Ready! https://your-project-dirname-tpspyhtdtk.now.sh (copied to clipboard)
Paste that URL into your browser when the build is complete, and you will see your deployed app.
You can find more details about now
here.
Something Missing?
If you have ideas for how we could improve this readme or the project in general, let us know or contribute some!