You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/reference/rsc/server-components.md
+26-27Lines changed: 26 additions & 27 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,30 +1,29 @@
1
1
---
2
-
title: Server Components
2
+
title: Компоненты сервера
3
3
---
4
-
5
4
<RSC>
6
5
7
-
Server Components предназначены для использования в [React Server Components](/learn/start-a-new-react-project#bleeding-edge-react-frameworks).
6
+
Server Components используются в [React Server Components](/learn/start-a-new-react-project#bleeding-edge-react-frameworks).
8
7
9
8
</RSC>
10
9
11
10
<Intro>
12
11
13
-
Server Components — это новый тип компонентов, которые рендерятся заранее, до сборки бандла, в среде, отдельной от вашего клиентского приложения или SSR-сервера.
12
+
Server Components — это новый тип компонентов, которые рендерятся заранее, до бандлинга, в среде, отдельной от вашего клиентского приложения или SSR-сервера.
14
13
15
14
</Intro>
16
15
17
-
Эта отдельная среда — «сервер» в React Server Components. Server Components могут запускаться один раз во время сборки на вашем CI-сервере или для каждого запроса с помощью веб-сервера.
16
+
Эта отдельная среда — «сервер» в React Server Components. Server Components могут запускаться один раз во время сборки на вашем CI-сервере или для каждого запроса с использованием веб-сервера.
18
17
19
18
<InlineToc />
20
19
21
20
<Note>
22
21
23
-
#### Как мне реализовать поддержку Server Components? {/*how-do-i-build-support-for-server-components*/}
22
+
#### Как реализовать поддержку Server Components? {/*how-do-i-build-support-for-server-components*/}
24
23
25
24
Хотя React Server Components в React 19 стабильны и не будут ломаться между минорными версиями, базовые API, используемые для реализации бандлера или фреймворка React Server Components, не следуют semver и могут ломаться между минорными версиями в React 19.x.
26
25
27
-
Для поддержки React Server Components в качестве бандлера или фреймворка мы рекомендуем зафиксировать конкретную версию React или использовать Canary-релиз. Мы продолжим работать с бандлерами и фреймворками над стабилизацией API, используемых для реализации React Server Components, в будущем.
26
+
Для поддержки React Server Components в качестве бандлера или фреймворка мы рекомендуем закрепиться на конкретной версии React или использовать Canary release. Мы продолжим работать с бандлерами и фреймворками над стабилизацией API, используемых для реализации React Server Components, в будущем.
Этот шаблон означает, что пользователи должны загрузить и разобрать дополнительные 75K (gzipped) библиотек и дождаться второго запроса для получения данных после загрузки страницы, только чтобы отобразить статический контент, который не изменится в течение всего времени жизни страницы.
60
+
Этот шаблон означает, что пользователям необходимо загрузить и разобрать дополнительные 75K (gzipped) библиотек и дождаться второго запроса для получения данных после загрузки страницы, только чтобы отрисовать статический контент, который не изменится в течение всего времени жизни страницы.
62
61
63
-
С помощью Server Components вы можете отрендерить эти компоненты один раз во время сборки:
62
+
С помощью Server Components вы можете отрисовать эти компоненты один раз во время сборки:
64
63
65
64
```js
66
65
importmarkedfrom'marked'; // Не включено в бандл
@@ -74,13 +73,13 @@ async function Page({page}) {
74
73
}
75
74
```
76
75
77
-
Полученный результат затем может быть отрендерен серверной стороной (SSR) в HTML и загружен на CDN. Когда приложение загружается, клиент не увидит исходный компонент `Page` или ресурсоемкие библиотеки для рендеринга markdown. Клиент увидит только результат рендеринга:
76
+
Полученный результат затем может быть отрендерен на стороне сервера (SSR) в HTML и загружен на CDN. Когда приложение загружается, клиент не увидит исходный компонент `Page` или ресурсоёмкие библиотеки для рендеринга markdown. Клиент увидит только отрисованный результат:
78
77
79
78
```js
80
79
<div><!-- html для markdown --></div>
81
80
```
82
81
83
-
Это означает, что контент виден во время первой загрузки страницы, а бандл не включает ресурсоемкие библиотеки, необходимые для рендеринга статического контента.
82
+
Это означает, что контент виден во время первой загрузки страницы, а бандл не включает ресурсоёмкие библиотеки, необходимые для рендеринга статического контента.
84
83
85
84
<Note>
86
85
@@ -92,14 +91,14 @@ async function Page({page}) {
92
91
}
93
92
```
94
93
95
-
Async Components — это новая функция Server Components, которая позволяет использовать `await`во время рендера.
94
+
Async Components — это новая функция Server Components, которая позволяет использовать `await`при рендеринге.
96
95
97
96
См. [Async components with Server Components](#async-components-with-server-components) ниже.
98
97
99
98
</Note>
100
99
101
100
### Server Components с сервером {/*server-components-with-a-server*/}
102
-
Server Components также могут запускаться на веб-сервере во время запроса страницы, позволяя вам получить доступ к вашему слою данных без необходимости создавать API. Они рендерятся до того, как ваше приложение будет собрано, и могут передавать данные и JSX в качестве пропсов клиентским компонентам.
101
+
Server Components также могут запускаться на веб-сервере во время запроса страницы, позволяя вам получить доступ к вашему слою данных без необходимости создавать API. Они рендерятся до того, как ваше приложение будет сбандлено, и могут передавать данные и JSX в качестве пропсов Client Components.
103
102
104
103
Без Server Components часто приходится получать динамические данные на клиенте в Effect:
С помощью Server Components вы можете получить данные и отрендерить их в компоненте:
152
+
С помощью Server Components вы можете читать данные и рендерить их в компоненте:
154
153
155
154
```js
156
155
importdbfrom'./database';
@@ -174,7 +173,7 @@ async function Author({id}) {
174
173
}
175
174
```
176
175
177
-
Затем бандлер объединяет данные, отрендеренные Server Components и динамические Client Components в бандл. При желании этот бандл может быть отрендерен серверной стороной (SSR) для создания начального HTML-кода страницы. Когда страница загружается, браузер не видит исходные компоненты `Note` и `Author`; клиенту отправляется только результат рендеринга:
176
+
Затем бандлер объединяет данные, отрисованные Server Components и динамические Client Components в бандл. При желании этот бандл может быть отрендерен на стороне сервера (SSR) для создания начального HTML-кода страницы. Когда страница загружается, браузер не видит исходные компоненты `Note` и `Author`; клиенту отправляется только отрисованный результат:
178
177
179
178
```js
180
179
<div>
@@ -183,17 +182,17 @@ async function Author({id}) {
183
182
</div>
184
183
```
185
184
186
-
Server Components могут быть сделаны динамическими путем повторного получения их с сервера, где они могут получить доступ к данным и снова отрендериться. Эта новая архитектура приложения сочетает простую модель «запрос/ответ» серверно-ориентированных многостраничных приложений с бесшовной интерактивностью клиентско-ориентированных одностраничных приложений, давая вам лучшее из обоих миров.
185
+
Server Components могут быть сделаны динамическими путем повторного получения их с сервера, где они могут получить доступ к данным и снова отрисоваться. Эта новая архитектура приложения сочетает простую модель «запрос/ответ» серверно-ориентированных многостраничных приложений с бесшовной интерактивностью клиентско-ориентированных одностраничных приложений, предоставляя вам лучшее из обоих миров.
187
186
188
-
### Добавление интерактивности к Server Components {/*adding-interactivity-to-server-components*/}
187
+
### Добавление интерактивности в Server Components {/*adding-interactivity-to-server-components*/}
189
188
190
-
Server Components не отправляются в браузер, поэтому они не могут использовать интерактивные API, такие как `useState`. Чтобы добавить интерактивность к Server Components, вы можете комбинировать их с Client Components, используя директиву `"use client"`.
189
+
Server Components не отправляются в браузер, поэтому они не могут использовать интерактивные API, такие как `useState`. Чтобы добавить интерактивность в Server Components, вы можете комбинировать их с Client Components, используя директиву `"use client"`.
191
190
192
191
<Note>
193
192
194
-
#### Для Server Components нет директивы. {/*there-is-no-directive-for-server-components*/}
193
+
#### Директивы для Server Components не существует. {/*there-is-no-directive-for-server-components*/}
195
194
196
-
Распространенное заблуждение заключается в том, что Server Components обозначаются `"use server"`, но для Server Components директивы нет. Директива `"use server"` используется для Server Functions.
195
+
Распространенное заблуждение заключается в том, что Server Components обозначаются как `"use server"`, но директивы для Server Components не существует. Директива `"use server"` используется для Server Functions.
197
196
198
197
Для получения дополнительной информации см. документацию по [Directives](/reference/rsc/directives).
199
198
@@ -237,7 +236,7 @@ export default function Expandable({children}) {
237
236
}
238
237
```
239
238
240
-
Это работает следующим образом: сначала рендерится `Notes` как Server Component, а затем бандлеру дается указание создать бандл для Client Component `Expandable`. В браузере Client Components увидят результат рендеринга Server Components, переданный в качестве пропсов:
239
+
Это работает следующим образом: сначала `Notes`рендерится как Server Component, а затем бандлеру дается указание создать бандл для Client Component `Expandable`. В браузере Client Components увидят результат Server Components, переданный в качестве пропсов:
241
240
242
241
```js
243
242
<head>
@@ -257,11 +256,11 @@ export default function Expandable({children}) {
257
256
</body>
258
257
```
259
258
260
-
### Async components with Server Components {/*async-components-with-server-components*/}
259
+
### Async components с Server Components {/*async-components-with-server-components*/}
261
260
262
-
Server Components представляют новый способ написания компонентов с использованием async/await. Когда вы используете `await` в асинхронном компоненте, React приостанавливает выполнение и ждет разрешения промиса перед возобновлением рендеринга. Это работает между границами сервера и клиента с поддержкой потоковой передачи для Suspense.
261
+
Server Components представляют новый способ написания компонентов с использованием async/await. Когда вы используете `await` в асинхронном компоненте, React приостанавливает выполнение и ждет разрешения промиса перед возобновлением рендеринга. Это работает на границах сервера/клиента с поддержкой потоковой передачи для Suspense.
263
262
264
-
Вы можете даже создать промис на сервере и дождаться его на клиенте:
263
+
Вы можете даже создать промис на сервере и ожидать его на клиенте:
265
264
266
265
```js
267
266
// Server Component
@@ -271,7 +270,7 @@ async function Page({id}) {
271
270
// Приостановит выполнение Server Component.
272
271
constnote=awaitdb.notes.get(id);
273
272
274
-
// ПРИМЕЧАНИЕ: не дожидается, начнется здесь и будет ждать на клиенте.
273
+
// ПРИМЕЧАНИЕ: не ожидается, начнется здесь и будет ожидаться на клиенте.
275
274
constcommentsPromise=db.comments.get(note.id);
276
275
return (
277
276
<div>
@@ -291,12 +290,12 @@ import {use} from 'react';
291
290
292
291
functionComments({commentsPromise}) {
293
292
// ПРИМЕЧАНИЕ: это возобновит промис с сервера.
294
-
//Будет приостановлено до тех пор, пока данные не станут доступны.
293
+
//Он будет приостановлен до тех пор, пока данные не станут доступны.
295
294
constcomments=use(commentsPromise);
296
295
returncomments.map(commment=><p>{comment}</p>);
297
296
}
298
297
```
299
298
300
-
Контент `note` является важными данными для рендеринга страницы, поэтому мы ждем его на сервере. Комментарии находятся ниже основной части страницы и имеют более низкий приоритет, поэтому мы запускаем промис на сервере и ждем его на клиенте с помощью API `use`. Это вызовет Suspend на клиенте, не блокируя рендеринг контента `note`.
299
+
Контент `note` является важными данными для рендеринга страницы, поэтому мы ожидаем его на сервере. Комментарии находятся ниже основного контента и имеют более низкий приоритет, поэтому мы запускаем промис на сервере и ожидаем его на клиенте с помощью API `use`. Это приведет к приостановке выполнения на клиенте, не блокируя рендеринг контента `note`.
301
300
302
301
Поскольку асинхронные компоненты не поддерживаются на клиенте, мы ожидаем промис с помощью `use`.
0 commit comments