Skip to content

Commit 260f4a0

Browse files
committed
docs(cn): update chinese translation for reference/rsc/server-components
1 parent 41e2d66 commit 260f4a0

1 file changed

Lines changed: 17 additions & 17 deletions

File tree

src/content/reference/rsc/server-components.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import sanitizeHtml from 'sanitize-html'; // 206K (63.3K gzipped)
3939

4040
function Page({page}) {
4141
const [content, setContent] = useState('');
42-
// 注意: 在第一次页面渲染 *之后* 加载。
42+
// 注意: 在第一次页面渲染 **之后** 加载。
4343
useEffect(() => {
4444
fetch(`/api/content/${page}`).then((data) => {
4545
setContent(data.content);
@@ -67,14 +67,14 @@ import marked from 'marked'; // 不会包括在 bundle 中
6767
import sanitizeHtml from 'sanitize-html'; // 不会包括在 bundle 中
6868

6969
async function Page({page}) {
70-
// 注意: 会在应用构建的 *渲染过程中* 加载
70+
// 注意: 会在应用构建的 **渲染过程中** 加载
7171
const content = await file.readFile(`${page}.md`);
7272

7373
return <div>{sanitizeHtml(marked(content))}</div>;
7474
}
7575
```
7676

77-
渲染的输出接着可以被服务端渲染(SSR)成 HTML 并上传至 CDN。当应用加载时,客户端不会看到原始的 `Page` 组件,或者用于渲染 markdown 且体积大的包。客户端只会看到渲染出来的内容
77+
渲染的输出接着可以被服务端渲染(SSR)成 HTML 并上传至 CDN。当应用加载时,客户端不会看到原始的 `Page` 组件,也不会看到用于渲染 markdown 且体积较大的包。客户端只会看到最终渲染出来的 HTML 内容
7878

7979
```js
8080
<div><!-- html for markdown --></div>
@@ -99,15 +99,15 @@ async function Page({page}) {
9999
</Note>
100100

101101
### 使用服务器的服务器组件 {/*server-components-with-a-server*/}
102-
服务器组件也可以在一次页面的请求时,在 Web 服务器上运行,从而让你不需要建立 API 就可以访问数据层。这类服务器组件在应用打包之前被渲染,并且可以向客户端组件传递数据和 JSX 作为 prop
102+
服务器组件也可以在请求页面时在 Web 服务器上运行,从而让你不需要建立 API 就可以访问数据层。这类服务器组件在应用打包之前被渲染,并且可以将数据和 JSX 作为 props 传递给客户端组件
103103

104-
不使用服务器组件,通常会在客户端的一个 Effect 里获取动态数据:
104+
如果不使用服务器组件,通常会在客户端的 Effect 里获取动态数据:
105105

106106
```js
107107
// bundle.js
108108
function Note({id}) {
109109
const [note, setNote] = useState('');
110-
// 注意: 在第一次渲染 *之后* 加载。
110+
// 注意: 在第一次渲染 **之后** 加载。
111111
useEffect(() => {
112112
fetch(`/api/notes/${id}`).then(data => {
113113
setNote(data.note);
@@ -124,7 +124,7 @@ function Note({id}) {
124124

125125
function Author({id}) {
126126
const [author, setAuthor] = useState('');
127-
// 注意: 在 Note 渲染 *之后* 加载。
127+
// 注意: 在 Note 渲染 **之后** 加载。
128128
// 造成昂贵的客户端-服务器瀑布
129129
useEffect(() => {
130130
fetch(`/api/authors/${id}`).then(data => {
@@ -156,7 +156,7 @@ app.get(`/api/authors/:id`, async (req, res) => {
156156
import db from './database';
157157

158158
async function Note({id}) {
159-
// 注意: 在 *渲染时* 加载。
159+
// 注意: 在 **渲染时** 加载。
160160
const note = await db.notes.get(id);
161161
return (
162162
<div>
@@ -167,14 +167,14 @@ async function Note({id}) {
167167
}
168168

169169
async function Author({id}) {
170-
// 注意: 在 Note 之 *后* 加载,
171-
// 如果数据存储在一个地方会加载很快
170+
// 注意: 在 Note **之后** 加载,
171+
// 如果服务器组件和数据库在同一个位置(例如在同一台服务器上),这里读取数据的加载速度会很快
172172
const author = await db.authors.get(id);
173173
return <span>By: {author.name}</span>;
174174
}
175175
```
176176

177-
打包器接着会整合数据,渲染服务器组件和动态客户端组件成一个包。接着可以选择将这个包服务端渲染(SSR)以创建页面初始的 HTML。页面加载时,浏览器不会看到原始的 `Note``Author` 组件,只有渲染后的输出才会发送到客户端:
177+
打包器接着会整合数据、渲染服务器组件并和动态客户端组件一起打成一个包。接着可以选择将这个包进行服务端渲染(SSR)以创建初始的 HTML 页面。当页面加载时,浏览器不会看到原始的 `Note``Author` 组件,只有渲染后的输出才会发送到客户端:
178178

179179
```js
180180
<div>
@@ -183,7 +183,7 @@ async function Author({id}) {
183183
</div>
184184
```
185185

186-
可以通过重新请求服务器来使服务器组件动态化,重新请求时,它们可以访问数据并重新渲染。这种新的应用结构融合了以服务器为中心多页应用的「请求/响应」心智模型,和以客户端为中心单页应用的无缝交互性,给你提供两者的优点
186+
可以通过重新请求服务器来使服务器组件动态化,重新请求时,它们可以访问数据并重新渲染。这种新的应用结构将以服务器为中心多页应用的「请求/响应」心智模型和以客户端为中心单页应用的无缝交互性的优点融合在一起,给你提供两全其美的体验
187187

188188
### 给服务器组件添加交互性 {/*adding-interactivity-to-server-components*/}
189189

@@ -237,7 +237,7 @@ export default function Expandable({children}) {
237237
}
238238
```
239239

240-
其工作原理是,首先将 `Notes` 作为服务器组件渲染,然后指引打包器为客户端组件 `Expandable` 创建一个包。在浏览器中,客户端组件会接收服务器组件的输出作为 prop 传递。
240+
其工作原理是,首先将 `Notes` 作为服务器组件渲染,然后指引打包器为客户端组件 `Expandable` 创建一个包。在浏览器中,客户端组件会接收服务器组件的输出并作为 props 传递。
241241

242242
```js
243243
<head>
@@ -259,7 +259,7 @@ export default function Expandable({children}) {
259259

260260
### 使用服务器组件的异步组件 {/*async-components-with-server-components*/}
261261

262-
服务器组件引入了一种使用 async/await 编写组件的新方法。当你在一个异步组件里 `await` 时,React 会暂停,等待 promise 解析完成后再继续渲染。这在服务器/客户端边界之间有效,并且支持 Suspense 的流式传输。
262+
服务器组件引入了一种使用 async/await 编写组件的新方法。当你在一个异步组件里 `await` 时,React 会暂停,等待 promise 解析完成后再继续渲染。这种等待可以跨越服务器和客户端的边界生效,并且支持 Suspense 的流式传输。
263263

264264
你甚至可以在服务器上创建一个 promise,然后再客户端上 await 它。
265265

@@ -268,10 +268,10 @@ export default function Expandable({children}) {
268268
import db from './database';
269269

270270
async function Page({id}) {
271-
// 使用了await,会使服务器组件暂停
271+
// 使用 await 会使服务器组件暂停
272272
const note = await db.notes.get(id);
273273

274-
// 注意: 没有使用 await, 从这里开始,到客户端上去 awiat
274+
// 注意: 没有使用 await, 所以从这里开始执行,但是客户端上面进行 await
275275
const commentsPromise = db.comments.get(note.id);
276276
return (
277277
<div>
@@ -290,7 +290,7 @@ async function Page({id}) {
290290
import {use} from 'react';
291291

292292
function Comments({commentsPromise}) {
293-
// 注意: 这样做会继续服务器上的 promise
293+
// 注意: 这样做会复用服务器上的 promise
294294
// 它会一直等到数据可用之后才继续
295295
const comments = use(commentsPromise);
296296
return comments.map(commment => <p>{comment}</p>);

0 commit comments

Comments
 (0)