Skip to content

Commit 9a26a76

Browse files
authored
docs: Update Russian translation (#1242)
* Update blog/introducing-signals.md * Update blog/preact-x.md * Update guide/v10/differences-to-react.md * Update guide/v10/hooks.md * Update guide/v10/refs.md * Update guide/v10/signals.md * Update guide/v10/switching-to-preact.md * Update guide/v10/typescript.md * Update guide/v8/differences-to-react.md * Update tutorial/03-components.md * Update tutorial/04-state.md * Update tutorial/05-refs.md * Update tutorial/07-side-effects.md * Update tutorial/08-keys.md
1 parent ea81e1d commit 9a26a76

14 files changed

+86
-38
lines changed

content/ru/blog/introducing-signals.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ render(<Counter />, document.getElementById('app'));
6060

6161
## Контекстный хаос
6262

63-
Другой распространённый обходной путь, к которому прибегают команды при разделении состояний, заключается в том, чтобы поместить состояние в контекст. Это позволяет сократить время рендеринга, потенциально пропуская рендеринг для компонентов между поставщиком контекста и потребителями. Однако здесь есть одна загвоздка: может быть обновлено только значение, переданное поставщику контекста, и только в целом. Обновление свойства объекта, выставляемого через контекст, не приводит к обновлению потребителей этого контекста — гранулярное обновление невозможно. Возможные варианты решения этой проблемы — разделение состояния на несколько контекстов или аннулирование объекта контекста путем его клонирования при изменении любого из его свойств.
63+
Другой распространённый обходной путь, к которому прибегают команды при разделении состояний, заключается в том, чтобы поместить состояние в контекст. Это позволяет сократить время рендеринга, потенциально пропуская рендеринг для компонентов между поставщиком контекста и потребителями. Однако здесь есть одна загвоздка: может быть обновлено только значение, переданное поставщику контекста, и только в целом. Обновление свойства объекта, выставляемого через контекст, не приводит к обновлению потребителей этого контекста — гранулярное обновление невозможно. Возможные варианты решения этой проблемы — разделение состояния на несколько контекстов или аннулирование объекта контекста путём его клонирования при изменении любого из его свойств.
6464

6565
![Контекст может пропускать обновление компонентов до тех пор, пока из него не будет считано значение. Затем снова приступают к мемоизации.](/signals/context-chaos.png)
6666

content/ru/blog/preact-x.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const App = () => {
5454

5555
### 10.8.0
5656

57-
В 10.8.0 мы ввели [регулировку состояния](https://github.com/preactjs/preact/pull/3553), которая гарантирует, что если компонент обновляет состояние хука во время рендеринга, мы подхватим это, отменим предыдущие эффекты и продолжим рендеринг. Нам, конечно, придется следить за тем, чтобы это не зацикливалось, но эта функция уменьшает количество рендеров, которые стоят в очереди из-за обращений к состоянию рендера. Эта функция также повышает нашу совместимость с экосистемой React, поскольку многие библиотеки полагаются на то, что эффекты не будут вызываться несколько раз из-за обновлений состояния рендера.
57+
В 10.8.0 мы ввели [регулировку состояния](https://github.com/preactjs/preact/pull/3553), которая гарантирует, что если компонент обновляет состояние хука во время рендеринга, мы подхватим это, отменим предыдущие эффекты и продолжим рендеринг. Нам, конечно, придется следить за тем, чтобы это не зацикливалось, но эта функция уменьшает количество перерисовок, которые стоят в очереди из-за обращений к состоянию рендера. Эта функция также повышает нашу совместимость с экосистемой React, поскольку многие библиотеки полагаются на то, что эффекты не будут вызываться несколько раз из-за обновлений состояния рендера.
5858

5959
### 10.11.0
6060

@@ -89,7 +89,7 @@ const App = () => {
8989
return toggled ? (
9090
<div onClick={() => setToggled(false)}>
9191
<span>clear</span>
92-
</div>
92+
</div>
9393
) : (
9494
<div>
9595
<button

content/ru/guide/v10/differences-to-react.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ Preact стремится максимально соответствовать
103103
<div className="foo" />
104104
```
105105

106-
Большинство разработчиков Preact предпочитают использовать `class`, поскольку он короче в написании, но поддерживаются оба варианта.
106+
Большинство разработчиков Preact предпочитают использовать `class` вместо `className`, так как он короче в написании, но поддерживаются оба варианта.
107107

108108
### SVG внутри JSX
109109

@@ -168,7 +168,7 @@ React.createElement('a', { href: '/' }, React.createElement('span', null, 'Гл
168168

169169
## Возможности, эксклюзивные для `preact/compat`
170170

171-
`preact/compat` — это наш **уровень** совместимости, который преобразует код React в Preact. Для существующих пользователей React это может быть простой способ опробовать Preact, не меняя никакого кода, путем [установки нескольких псевдонимов](/guide/v10/getting-started#aliasing-react-to-preact) в конфигурации вашего сборщика.
171+
`preact/compat` — это наш **уровень** совместимости, который преобразует код React в Preact. Для существующих пользователей React это может быть простой способ опробовать Preact, не меняя никакого кода, путём [установки нескольких псевдонимов](/guide/v10/getting-started#aliasing-react-to-preact) в конфигурации вашего сборщика.
172172

173173
### Children API
174174

content/ru/guide/v10/hooks.md

+52-3
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ function useCounter() {
147147
```
148148

149149
Передача `value` здесь заставляет `useCallback` возвращать новую ссылку на функцию при каждом изменении `value`.
150-
Это необходимо для того, чтобы избежать «устаревших закрытий», когда обратный вызов всегда будет ссылаться на переменную `value` первого рендера с момента его создания, в результате чего `increment` всегда будет устанавливать значение `1`.
150+
Это необходимо для того, чтобы избежать «устаревших закрытий», когда обратный вызов всегда будет ссылаться на переменную `value` первой отрисовки с момента его создания, в результате чего `increment` всегда будет устанавливать значение `1`.
151151

152152
> Это создает новый обратный вызов `increment` каждый раз, когда изменяется `value`.
153153
> Из соображений производительности часто лучше использовать [обратный вызов](#usestate) для обновления значений состояния, а не сохранять текущее значение с помощью зависимостей.
@@ -262,9 +262,13 @@ const onClick = useCallback(() => console.log(a, b), [a, b]);
262262

263263
> Интересный факт: `useCallback(fn, deps)` эквивалентно `useMemo(() => fn, deps)`.
264264
265+
## Рефы
266+
267+
**Рефы** — это стабильные, локальные значения, которые сохраняются между перерисовками, но не вызывают их сами по себе. См. [Рефы](/guide/v10/refs) для получения дополнительной информации и примеров.
268+
265269
## useRef
266270

267-
Для получения стабильной ссылки на узел DOM или значение, которое сохраняется между рендерами, мы можем использовать хук `useRef`. Он работает аналогично [createRef](/guide/v10/refs#создание-рефа).
271+
Для получения стабильной ссылки на узел DOM или значение, которое сохраняется между перерисовками, мы можем использовать хук `useRef`. Он работает аналогично [createRef](/guide/v10/refs#создание-рефа).
268272

269273
```jsx
270274
// --repl
@@ -291,9 +295,54 @@ render(<Foo />, document.getElementById('app'));
291295
292296
> См. [Рефы](/guide/v10/refs) для получения дополнительной информации и примеров.
293297
298+
### useImperativeHandle
299+
300+
Чтобы изменить реф, переданный в дочерний компонент, мы можем использовать хук `useImperativeHandle`. Он принимает три аргумента: реф для изменения, функцию, которая будет выполнена и вернет новое значение рефа, и массив зависимостей, для определения необходимости повторного выполнения.
301+
302+
```jsx
303+
// --repl
304+
import { render } from "preact";
305+
import { useRef, useImperativeHandle, useState } from "preact/hooks";
306+
// --repl-before
307+
function MyInput({ inputRef }) {
308+
const ref = useRef(null);
309+
useImperativeHandle(inputRef, () => {
310+
return {
311+
// Раскрываем только метод `.focus()`, не предоставляя прямого доступа к узлу DOM
312+
focus() {
313+
ref.current.focus();
314+
},
315+
};
316+
}, []);
317+
318+
return (
319+
<label>
320+
Name: <input ref={ref} />
321+
</label>
322+
);
323+
}
324+
325+
function App() {
326+
const inputRef = useRef(null);
327+
328+
const handleClick = () => {
329+
inputRef.current.focus();
330+
};
331+
332+
return (
333+
<div>
334+
<MyInput inputRef={inputRef} />
335+
<button onClick={handleClick}>Нажмите для редактирования</button>
336+
</div>
337+
);
338+
}
339+
// --repl-after
340+
render(<App />, document.getElementById("app"));
341+
```
342+
294343
## useContext
295344

296-
Для доступа к контексту в функциональном компоненте мы можем использовать хук `useContext`, без каких-либо вышестоящих компонентов или компонентов-оберток. Первым аргументом должен быть объект контекста, созданный в результате вызова `createContext`.
345+
Для доступа к контексту в функциональном компоненте мы можем использовать хук `useContext`, без каких-либо вышестоящих компонентов или компонентов-обёрток. Первым аргументом должен быть объект контекста, созданный в результате вызова `createContext`.
297346

298347
```jsx
299348
// --repl

content/ru/guide/v10/refs.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
22
name: Рефы
3-
description: 'Рефы — это способ создания стабильных значений, которые локальны для экземпляра компонента и сохраняются между рендерами.'
3+
description: 'Рефы — это способ создания стабильных значений, которые локальны для экземпляра компонента и сохраняются между перерисовками.'
44
---
55

66
# Рефы
77

8-
Ссылки на DOM-элементы, или рефы, — это стабильные локальные значения, которые сохраняются между рендерами компонента, но не вызывают повторные рендеры, как это делают состояние или пропсы при их изменении.
8+
Ссылки на DOM-элементы, или рефы, — это стабильные локальные значения, которые сохраняются между перерисовками компонента, но не вызывают повторные перерисовки, как это делают состояние или пропсы при их изменении.
99

1010
Чаще всего рефы используются для императивного управления DOM, но их можно использовать для хранения любых произвольных локальных значений, которые необходимо сохранить стабильными. Вы можете использовать их для отслеживания предыдущего значения состояния, хранения ссылки на идентификатор интервала или таймаута, или просто для хранения значения счётчика. Важно отметить, что рефы не должны использоваться для логики рендеринга; вместо этого их следует использовать только в методах жизненного цикла и обработчиках событий.
1111

content/ru/guide/v10/signals.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ function Counter() {
6363
const value = count.value;
6464

6565
const increment = () => {
66-
// Сигнал обновляется путем присвоения значения свойству `.value`:
66+
// Сигнал обновляется путём присвоения значения свойству `.value`:
6767
count.value++;
6868
};
6969

content/ru/guide/v10/switching-to-preact.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ description: 'Всё, что нужно знать для перехода с Re
2222

2323
## PureComponent
2424

25-
Класс `PureComponent` работает аналогично `Component`. Разница в том, что `PureComponent` пропустит рендеринг, когда новые параметры будут равны старым. Для этого мы сравниваем старые и новые параметры посредством поверхностного сравнения, где мы проверяем каждое свойство параметра на ссылочное равенство. Это может значительно ускорить работу приложений, избегая ненужных повторных рендерингов. Это работает путем добавления хука жизненного цикла `shouldComponentUpdate` по умолчанию.
25+
Класс `PureComponent` работает аналогично `Component`. Разница в том, что `PureComponent` пропустит рендеринг, когда новые параметры будут равны старым. Для этого мы сравниваем старые и новые параметры посредством поверхностного сравнения, где мы проверяем каждое свойство параметра на ссылочное равенство. Это может значительно ускорить работу приложений, избегая ненужных повторных рендерингов. Это работает путём добавления хука жизненного цикла `shouldComponentUpdate` по умолчанию.
2626

2727
```jsx
2828
import { render } from 'preact';

content/ru/guide/v10/typescript.md

+15-16
Original file line numberDiff line numberDiff line change
@@ -226,34 +226,33 @@ const Input = (props: InputProperties) => <input {...props} />
226226
Preact генерирует регулярные события DOM. Пока ваш проект TypeScript включает библиотеку `dom` (установите её в `tsconfig.json`), у вас есть доступ ко всем типам событий, которые доступны в вашей текущей конфигурации.
227227

228228
```tsx
229+
import type { JSX } from "preact";
230+
229231
export class Button extends Component {
230-
handleClick(event: MouseEvent) {
231-
event.preventDefault();
232-
if (event.target instanceof HTMLElement) {
233-
alert(event.target.tagName); // Оповещение BUTTON
234-
}
232+
handleClick(event: JSX.TargetedMouseEvent<HTMLButtonElement>) {
233+
alert(event.currentTarget.tagName); // Оповещение BUTTON
235234
}
236235

237236
render() {
238-
return <button onClick={this.handleClick}>{this.props.children}</button>;
237+
return (
238+
<button onClick={this.handleClick}>
239+
{this.props.children}
240+
</button>
241+
);
239242
}
240243
}
241244
```
242245

243-
Вы можете ограничить обработчики событий, добавив аннотацию типа `this` к сигнатуре функции в качестве первого аргумента. Этот аргумент будет стерт после транспиляции.
246+
Если вы предпочитаете встроенные функции, можно обойтись без явного указания текущей цели события, так как она выводится из элемента JSX.
244247

245248
```tsx
246249
export class Button extends Component {
247-
// Добавление этого аргумента ограничивает привязку
248-
handleClick(this: HTMLButtonElement, event: MouseEvent) {
249-
event.preventDefault();
250-
if (event.target instanceof HTMLElement) {
251-
console.log(event.target.localName); // "button"
252-
}
253-
}
254-
255250
render() {
256-
return <button onClick={this.handleClick}>{this.props.children}</button>;
251+
return (
252+
<button onClick={(event) => alert(event.currentTarget.tagName)}>
253+
{this.props.children}
254+
</button>
255+
);
257256
}
258257
}
259258
```

0 commit comments

Comments
 (0)