Skip to content

Commit eeefb2c

Browse files
committed
hypens swapped with quotes
1 parent ed6c9d9 commit eeefb2c

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

content/docs/concurrent-mode-suspense.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ const ProfilePage = React.lazy(() => import('./ProfilePage')); // Ленивая
4343
- [Что если я не использую Relay?](#what-if-i-dont-use-relay)
4444
- [Для авторов библиотек](#for-library-authors)
4545
- [Классические подходы против Задержки](#traditional-approaches-vs-suspense)
46-
- [Подход 1: Получаем-после-рендера (задержка не используется)](#approach-1-fetch-on-render-not-using-suspense)
47-
- [Подход 2: Получаем-потом-рендерим (задержка не используется)](#approach-2-fetch-then-render-not-using-suspense)
48-
- [Подход 3: Рендерим-во-время-получения-данных (используем Задержку)](#approach-3-render-as-you-fetch-using-suspense)
46+
- [Подход 1: «Получаем после рендера»‎ (задержка не используется)](#approach-1-fetch-on-render-not-using-suspense)
47+
- [Подход 2: «Получаем потом рендерим»‎ (задержка не используется)](#approach-2-fetch-then-render-not-using-suspense)
48+
- [Подход 3: «Рендерим во время получения данных»‎ (используем Задержку)](#approach-3-render-as-you-fetch-using-suspense)
4949
- [Начинаем получать данные рано](#start-fetching-early)
5050
- [Мы все ещё в этом разбираемся](#were-still-figuring-this-out)
5151
- [Задержка и состояние гонки](#suspense-and-race-conditions)
@@ -149,17 +149,17 @@ function ProfileTimeline() {
149149

150150
Наоборот, мы взглянем на Задержку, как на следующий логический шаг в перечне подходов:
151151

152-
* **Получаем-после-рендера (например, `fetch` в `useEffect`):** Начинаем рендерить компоненты. Каждый из этих компонентов может вызвать получение данных в своих «эффектах» и методах жизненного цикла. Этот подход обычно ведёт к «водопадам».
153-
* **Получаем-потом-рендерим (например, Relay без Задержки):** Начинаем получать все данные для следующего экрана как можно раньше. Когда данные готовы – рендерим новый экран. Мы ничего не можем делать пока не получим все данные.
154-
* **Рендерим-во-время-получения-данных (например, Relay с Задержкой):** Начинаем получать все требуемые данные для следующего экрана как можно раньше и начинаем рендерить новый экран *немедленно — до того, как получим ответ от сети*. По мере поступления данных, React повторяет рендер компонентов, которым всё ещё нужны данные, до тех пор, пока они не будут готовы.
152+
* **«Получаем после рендера»‎ (например, `fetch` в `useEffect`):** Начинаем рендерить компоненты. Каждый из этих компонентов может вызвать получение данных в своих «эффектах» и методах жизненного цикла. Этот подход обычно ведёт к «водопадам».
153+
* **«Получаем потом рендерим»‎ (например, Relay без Задержки):** Начинаем получать все данные для следующего экрана как можно раньше. Когда данные готовы – рендерим новый экран. Мы ничего не можем делать пока не получим все данные.
154+
* **«Рендерим во время получения данных»‎ (например, Relay с Задержкой):** Начинаем получать все требуемые данные для следующего экрана как можно раньше и начинаем рендерить новый экран *немедленно — до того, как получим ответ от сети*. По мере поступления данных, React повторяет рендер компонентов, которым всё ещё нужны данные, до тех пор, пока они не будут готовы.
155155

156156
>Примечание
157157
>
158158
>Это немного упрощено и на практике требуется использование нескольких подходов. Тем не менее, мы будем рассматривать их отдельно, чтобы лучше отразить компромиссы, которые они требуют.
159159
160160
Для сравнения подходов мы реализуем страницу с профилем пользователя используя каждый из них.
161161

162-
### Подход 1: Получаем-после-рендера (задержка не используется) {#approach-1-fetch-on-render-not-using-suspense}
162+
### Подход 1: «Получаем после рендера»‎ (задержка не используется) {#approach-1-fetch-on-render-not-using-suspense}
163163

164164
Распространённый сегодня способ получения данных в React с использованием эффекта:
165165

@@ -175,7 +175,7 @@ componentDidMount() {
175175
}
176176
```
177177

178-
Мы зовем этот подход «получаем-после-рендера» потому что получение данных начинается *после* рендера компонента на экране. Это приводит к проблеме, известной как «водопад».
178+
Мы зовем этот подход «получаем после рендера» потому что получение данных начинается *после* рендера компонента на экране. Это приводит к проблеме, известной как «водопад».
179179

180180
Взгляните на компоненты `<ProfilePage>` и `<ProfileTimeline>`:
181181

@@ -233,7 +233,7 @@ function ProfileTimeline() {
233233

234234
Водопады распространены в коде который получает данные после рендера. Их можно устранить, но по мере роста продукта, многие люди предпочитают использовать решение, которое защищает от этой проблемы.
235235

236-
### Подход 2: Получаем-потом-рендерим (задержка не используется) {#approach-2-fetch-then-render-not-using-suspense}
236+
### Подход 2: «Получаем потом рендерим»‎ (задержка не используется) {#approach-2-fetch-then-render-not-using-suspense}
237237

238238
Библиотеки могут предотвратить появление водопадов предлагая более централизованный способ получения данных. Например, Relay решает эту проблему перемещением информации о данных, которые нужны компоненту в статически анализируемые *фрагменты*, которые позже собираются в единый запрос.
239239

@@ -307,7 +307,7 @@ function ProfileTimeline({ posts }) {
307307

308308
Конечно, это можно исправить в данном примере. Мы можем убрать вызов `Promise.all()` и ждать оба промиса отдельно. Однако этот подход прогрессивно усложняется с увеличением количества данных и ростом дерева компонентов. Сложно писать надежные компоненты когда произвольные части дерева данных могут исчезать или устаревать. Поэтому рендер *после* получения всех данных для нового экрана часто является более практичным вариантом.
309309

310-
### Подход 3: Рендерим-во-время-получения-данных (используем Задержку) {#approach-3-render-as-you-fetch-using-suspense}
310+
### Подход 3: «Рендерим во время получения данных»‎ (используем Задержку) {#approach-3-render-as-you-fetch-using-suspense}
311311

312312
В предыдущем подходе мы получали данные перед вызовом `setState`:
313313

@@ -371,13 +371,13 @@ function ProfileTimeline() {
371371

372372
**Чем больше потоков данных поступает, React будет пробовать рендерить и каждый раз он сможет продвигаться «глубже».** Когда данные `resource.user` получены, компонент `<ProfileDetails>` успешно отрендерится и нам больше не потребуется заглушка `<h1>Loading profile...</h1>`. В итоге мы получим все данные и заглушек больше не будет на экране.
373373

374-
Здесь есть интересный момент. Даже если мы используем клиент GraphQL, который собирает все требования к данным в единый запрос, *потоковая передача ответа позволяет нам быстрее показать больше контента*. Так как мы рендерим *во время получения* (в отличии от *после* получения) и если `user` появится в ответе раньше, чем `posts`, мы сможем «убрать» внешнюю заглушку `<Suspense>` до окончания ответа. Мы могли упустить это ранее, но даже при подходе получаем-потом-рендерим решение содержит водопад: между получением и рендером. Задержка не страдает от этого водопада и библиотеки, такие как Relay пользуются этим.
374+
Здесь есть интересный момент. Даже если мы используем клиент GraphQL, который собирает все требования к данным в единый запрос, *потоковая передача ответа позволяет нам быстрее показать больше контента*. Так как мы рендерим *во время получения* (в отличии от *после* получения) и если `user` появится в ответе раньше, чем `posts`, мы сможем «убрать» внешнюю заглушку `<Suspense>` до окончания ответа. Мы могли упустить это ранее, но даже при подходе «получаем потом рендерим»‎ решение содержит водопад: между получением и рендером. Задержка не страдает от этого водопада и библиотеки, такие как Relay пользуются этим.
375375

376376
Обратите внимание, как мы избавились от проверок `if (...)` «идет загрузка» в наших компонентах. Это не только убирает шаблонный код, но и упрощает быстрые изменения в дизайне. Например, если мы хотим, чтобы информация о пользователе и его сообщения всегда появлялись вместе, мы можем удалить разделение `<Suspense>` между ними. Или мы можем сделать их независимыми от друг друга, предоставив каждому *собственный* `<Suspense>`. Задержка позволяет нам изменить степень раздробленности наших состояний загрузки и управлять их последовательностью без больших изменений в коде.
377377

378378
## Начинаем получать данные рано {#start-fetching-early}
379379

380-
Если вы работает над библиотекой получения данных, есть важный аспект в подходе Рендерим-во-время-получения-данных, который не стоит упускать. **Мы запускаем получение данных _перед_ рендером.** Посмотрите внимательно на этот пример:
380+
Если вы работает над библиотекой получения данных, есть важный аспект в подходе «рендерим во время получения данных»‎, который не стоит упускать. **Мы запускаем получение данных _перед_ рендером.** Посмотрите внимательно на этот пример:
381381

382382
```js
383383
// Начинаем получать данные рано!

0 commit comments

Comments
 (0)