diff --git a/content/docs/concurrent-mode-adoption.md b/content/docs/concurrent-mode-adoption.md index 45d3b0ea3..09c138642 100644 --- a/content/docs/concurrent-mode-adoption.md +++ b/content/docs/concurrent-mode-adoption.md @@ -1,6 +1,6 @@ --- id: concurrent-mode-adoption -title: Adopting Concurrent Mode (Experimental) +title: Использование конкурентного режима (экспериментально) permalink: docs/concurrent-mode-adoption.html prev: concurrent-mode-patterns.html next: concurrent-mode-reference.html @@ -15,98 +15,98 @@ next: concurrent-mode-reference.html
->Caution: +>Внимание: > ->This page describes **experimental features that are not yet available in a stable release**. Don't rely on experimental builds of React in production apps. These features may change significantly and without a warning before they become a part of React. +>На странице описаны **экспериментальные функции, которых еще нет в стабильной версии**. Не используйте экспериментальные сборки React в продакшен-приложениях. Эти функции могут значительно измениться без предупреждения перед тем, как попасть в React. > ->This documentation is aimed at early adopters and people who are curious. **If you're new to React, don't worry about these features** -- you don't need to learn them right now. - +>Эта документация предназначена для ранних пользователей и интересующихся. Если вы новичок в React, не беспокойтесь об этих возможностях -- вам не нужно изучать их прямо сейчас.
-- [Installation](#installation) - - [Who Is This Experimental Release For?](#who-is-this-experimental-release-for) - - [Enabling Concurrent Mode](#enabling-concurrent-mode) -- [What to Expect](#what-to-expect) - - [Migration Step: Blocking Mode](#migration-step-blocking-mode) - - [Why So Many Modes?](#why-so-many-modes) - - [Feature Comparison](#feature-comparison) +- [Установка](#installation) + - [Для кого предназначены экспериментальные релизы?](#who-is-this-experimental-release-for) + - [Включение конкурентного режима](#enabling-concurrent-mode) +- [К чему готовиться?](#what-to-expect) + - [Промежуточный этап: блокирующий режим](#migration-step-blocking-mode) + - [Зачем столько режимов?](#why-so-many-modes) + - [Сравнение возможностей](#feature-comparison) -## Installation {#installation} +## Установка {#installation} -Concurrent Mode is only available in the [experimental builds](/blog/2019/10/22/react-release-channels.html#experimental-channel) of React. To install them, run: +Конкурентный режим доступен только в [экспериментальных сборках](/blog/2019/10/22/react-release-channels.html#experimental-channel) React. Чтобы установить их, выполните: ``` npm install react@experimental react-dom@experimental ``` -**There are no semantic versioning guarantees for the experimental builds.** -APIs may be added, changed, or removed with any `@experimental` release. +**Для экспериментальных сборок нет гарантий семантического версионирования** + +В любом релизе с версией `@experimental` функции API могут быть добавлены, изменены или удалены. -**Experimental releases will have frequent breaking changes.** +**Экспериментальные релизы будут часто содержать критические изменения.** -You can try these builds on personal projects or in a branch, but we don't recommend running them in production. At Facebook, we *do* run them in production, but that's because we're also there to fix bugs when something breaks. You've been warned! +Вы можете пробовать такие сборки в личных проектах или в ветках, однако мы не рекомендуем использовать их в продакшене. В Facebook мы *используем* их в продакшене, поскольку можем исправлять ошибки, если что-то сломается. Мы вас предупредили. -### Who Is This Experimental Release For? {#who-is-this-experimental-release-for} +### Для кого предназначен этот экспериментальный релиз? {#who-is-this-experimental-release-for} -This release is primarily aimed at early adopters, library authors, and curious people. +Этот релиз предназначен в первую очередь для ранних пользователей, авторов библиотек и интересующихся. -We're using this code in production (and it works for us) but there are still some bugs, missing features, and gaps in the documentation. We'd like to hear more about what breaks in Concurrent Mode so we can better prepare it for an official stable release in the future. +Мы используем экспериментальный код в продакшене (это работает для нас), несмотря на то, что в нем есть некоторое количество ошибок, недоделанные возможности и пробелы в документации. Нам бы хотелось выявить ошибки в конкурентном режиме, чтобы лучше подготовить его к официальному стабильному релизу в будущем. -### Enabling Concurrent Mode {#enabling-concurrent-mode} +### Включение конкурентного режима {#enabling-concurrent-mode} -Normally, when we add features to React, you can start using them immediately. Fragments, Context, and even Hooks are examples of such features. You can use in new code without making any changes to the existing code. +Обычно, когда мы добавляем новые возможности в React, вы можете сразу же использовать их. Например, фрагменты, контекст и даже хуки были именно такими. Их можно использовать в новом коде не меняя уже существующий. -Concurrent Mode is different. It introduces semantic changes to how React works. Otherwise, the [new features](/docs/concurrent-mode-patterns.html) enabled by it *wouldn't be possible*. This is why they're grouped into a new "mode" rather than released one by one in isolation. +С конкурентным режимом другая история. В нём изменена сама суть работы React. В противном случае использование [новых возможностей](/docs/concurrent-mode-patterns.html) *было бы невозможно*. Именно поэтому они объединены в новый "режим", а не выпускаются по-отдельности. -You can't opt into Concurrent Mode on a per-subtree basis. Instead, to opt in, you have to do it in the place where today you call `ReactDOM.render()`. +Вы не можете использовать конкурентный режим для отдельных поддеревьев. Включать конкурентный режим нужно в том же месте, где ранее вы вызывали функцию `ReactDOM.render()`. -**This will enable Concurrent Mode for the whole `` tree:** +**Включение конкурентного режима для всего дерева ``:** ```js import ReactDOM from 'react-dom'; -// If you previously had: +// Раньше вы использовали: // // ReactDOM.render(, document.getElementById('root')); // -// You can opt into Concurrent Mode by writing: +// Теперь для перехода в конкурентный режим нужно написать: ReactDOM.createRoot( document.getElementById('root') ).render(); ``` ->Note: +>Примечание: > ->Concurrent Mode APIs such as `createRoot` only exist in the experimental builds of React. +>Функции API конкурентного режима доступны только в экспериментальных сборках React. -In Concurrent Mode, the lifecycle methods [previously marked](https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html) as "unsafe" actually *are* unsafe, and lead to bugs even more than in today's React. We don't recommend trying Concurrent Mode until your app is [Strict Mode](https://reactjs.org/docs/strict-mode.html)-compatible. +В конкурентном режиме методы жизненного цикла, [ранее помеченные](https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html) как "небезопасные", *становятся* действительно небезопасными и приводят к ошибкам гораздо чаще, чем в текущих релизах React. Мы не рекомендуем использовать конкурентный режим, пока ваше приложение не будет поддерживать [строгий режим](https://reactjs.org/docs/strict-mode.html) -## What to Expect {#what-to-expect} +## К чему готовиться? {#what-to-expect} -If you have a large existing app, or if your app depends on a lot of third-party packages, please don't expect that you can use the Concurrent Mode immediately. **For example, at Facebook we are using Concurrent Mode for the new website, but we're not planning to enable it on the old website.** This is because our old website still uses unsafe lifecycle methods in the product code, incompatible third-party libraries, and patterns that don't work well with the Concurrent Mode. +Если у вас достаточно большое приложение или в нём много сторонних зависимостей, не стоит надеяться на быстрый переход на конкурентный режим. **Например, в Facebook мы используем конкурентный режим только на новых сайтах и не планируем задействовать его на старых.** Это из-за того, что старые сайты в продакшен-коде используют небезопасные методы жизненного цикла, несовместимые библиотеки сторонних разработчиков и паттерны, которые плохо работают в конкурентном режиме. -In our experience, code that uses idiomatic React patterns and doesn't rely on external state management solutions is the easiest to get running in the Concurrent Mode. We will describe common problems we've seen and the solutions to them separately in the coming weeks. +По нашему опыту, код, который использует классические паттерны React и не полагается на решения для управления внешним состоянием, проще всего запустить в параллельном режиме. В ближайшее время мы опишем проблемы, которые смогли обнаружить, и способы их решения. -### Migration Step: Blocking Mode {#migration-step-blocking-mode} +### Этап миграции: блокирующий режим {#migration-step-blocking-mode} -For older codebases, Concurrent Mode might be a step too far. This is why we also provide a new "Blocking Mode" in the experimental React builds. You can try it by substituting `createRoot` with `createBlockingRoot`. It only offers a *small subset* of the Concurrent Mode features, but it is closer to how React works today and can serve as a migration step. +Для старых проектов путь перехода на конкурентный режим может оказаться достаточно длинным. Поэтому в экспериментальных сборках React мы предусмотрели новый "блокирующий режим". Вы можете попробовать его, заменив `createRoot` на `createBlockingRoot`. Блокирующий режим предоставляет *сокращённый набор* возможностей конкурентного режима. При этом он ближе к тому, как работает React в настоящее время, и может послужить в качестве промежуточного этапа. -To recap: +Итого: -* **Legacy Mode:** `ReactDOM.render(, rootNode)`. This is what React apps use today. There are no plans to remove the legacy mode in the observable future — but it won't be able to support these new features. -* **Blocking Mode:** `ReactDOM.createBlockingRoot(rootNode).render()`. It is currently experimental. It is intended as a first migration step for apps that want to get a subset of Concurrent Mode features. -* **Concurrent Mode:** `ReactDOM.createRoot(rootNode).render()`. It is currently experimental. In the future, after it stabilizes, we intend to make it the default React mode. This mode enables *all* the new features. +* **Старый режим:** `ReactDOM.render(, rootNode)`. Это режим, в котором React работает в настоящее время. В обозримом будущем мы не планируем избавляться от старого режима, но он не будет поддерживать новые возможности. +* **Блокирующий режим:** `ReactDOM.createBlockingRoot(rootNode).render()`. В настоящее время экспериментальный. Он предназначен в качестве первого этапа миграции приложений, в которых предполагается использовать часть возможностей конкурентного режима. +* **Конкурентный режим:** `ReactDOM.createRoot(rootNode).render()`. В настоящее время экспериментальный. В будущем, после стабилизации, мы намерены сделать его основным режимом React. Данный режим задействует *все* новые возможности. -### Why So Many Modes? {#why-so-many-modes} +### Зачем столько режимов? {#why-so-many-modes} -We think it is better to offer a [gradual migration strategy](/docs/faq-versioning.html#commitment-to-stability) than to make huge breaking changes — or to let React stagnate into irrelevance. +Мы считаем, что лучше предложить [стратегию постепенной миграции](/docs/faq-versioning.html#commitment-to-stability), чем вносить огромные серьезные изменения или позволить React стагнировать. -In practice, we expect that most apps using Legacy Mode today should be able to migrate at least to the Blocking Mode (if not Concurrent Mode). This fragmentation can be annoying for libraries that aim to support all Modes in the short term. However, gradually moving the ecosystem away from the Legacy Mode will also *solve* problems that affect major libraries in the React ecosystem, such as [confusing Suspense behavior when reading layout](https://github.com/facebook/react/issues/14536) and [lack of consistent batching guarantees](https://github.com/facebook/react/issues/15080). There's a number of bugs that can't be fixed in Legacy Mode without changing semantics, but don't exist in Blocking and Concurrent Modes. +На практике мы ожидаем, что большинство приложений, использующих в настоящее время старый режим, смогут перейти на конкурентный или, как минимум, на блокирующий. Такая фрагментация может создать некоторые проблемы для авторов библиотек, которые будут вынуждены какое-то время поддерживать все режимы. Однако нужно учитывать, что постепенный переход со старого режима помогает решать проблемы, влияющие на основные библиотеки в экосистеме React, например, [странное поведение Задержек при чтении DOM](https://github.com/facebook/react/issues/14536) и [нестабильность пакетного рендеринга](https://github.com/facebook/react/issues/15080). Есть некоторое количество багов, которые невозможно исправить без изменения семантики в старом режиме, но при этом они отсутствуют в блокирующем или конкурентном режимах. -You can think of the Blocking Mode as a "gracefully degraded" version of the Concurrent Mode. **As a result, in longer term we should be able to converge and stop thinking about different Modes altogether.** But for now, Modes are an important migration strategy. They let everyone decide when a migration is worth it, and upgrade at their own pace. +Вы можете рассматривать блокирующий режим как "отказоустойчивую" версию конкурентного режима. **В конечном итоге, в долгосрочной перспективе, у нас будет возможность объединить оба режима и перестать рассматривать их как отдельные друг от друга.** В настоящее время режимы являются важной частью переходной стратегии. Они дают возможность каждому определять момент перехода на конкурентный режим и обновлять код в удобном для себя темпе. -### Feature Comparison {#feature-comparison} +### Сравнение возможностей {#feature-comparison}