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

Copy file name to clipboardexpand all lines: content/ru/blog/preact-x.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -54,7 +54,7 @@ const App = () => {
54
54
55
55
### 10.8.0
56
56
57
-
В 10.8.0 мы ввели [регулировку состояния](https://github.com/preactjs/preact/pull/3553), которая гарантирует, что если компонент обновляет состояние хука во время рендеринга, мы подхватим это, отменим предыдущие эффекты и продолжим рендеринг. Нам, конечно, придется следить за тем, чтобы это не зацикливалось, но эта функция уменьшает количество рендеров, которые стоят в очереди из-за обращений к состоянию рендера. Эта функция также повышает нашу совместимость с экосистемой React, поскольку многие библиотеки полагаются на то, что эффекты не будут вызываться несколько раз из-за обновлений состояния рендера.
57
+
В 10.8.0 мы ввели [регулировку состояния](https://github.com/preactjs/preact/pull/3553), которая гарантирует, что если компонент обновляет состояние хука во время рендеринга, мы подхватим это, отменим предыдущие эффекты и продолжим рендеринг. Нам, конечно, придется следить за тем, чтобы это не зацикливалось, но эта функция уменьшает количество перерисовок, которые стоят в очереди из-за обращений к состоянию рендера. Эта функция также повышает нашу совместимость с экосистемой React, поскольку многие библиотеки полагаются на то, что эффекты не будут вызываться несколько раз из-за обновлений состояния рендера.
`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) в конфигурации вашего сборщика.
Copy file name to clipboardexpand all lines: content/ru/guide/v10/hooks.md
+52-3
Original file line number
Diff line number
Diff line change
@@ -147,7 +147,7 @@ function useCounter() {
147
147
```
148
148
149
149
Передача `value` здесь заставляет `useCallback` возвращать новую ссылку на функцию при каждом изменении `value`.
150
-
Это необходимо для того, чтобы избежать «устаревших закрытий», когда обратный вызов всегда будет ссылаться на переменную `value`первого рендера с момента его создания, в результате чего `increment` всегда будет устанавливать значение `1`.
150
+
Это необходимо для того, чтобы избежать «устаревших закрытий», когда обратный вызов всегда будет ссылаться на переменную `value`первой отрисовки с момента его создания, в результате чего `increment` всегда будет устанавливать значение `1`.
151
151
152
152
> Это создает новый обратный вызов `increment` каждый раз, когда изменяется `value`.
153
153
> Из соображений производительности часто лучше использовать [обратный вызов](#usestate) для обновления значений состояния, а не сохранять текущее значение с помощью зависимостей.
**Рефы** — это стабильные, локальные значения, которые сохраняются между перерисовками, но не вызывают их сами по себе. См. [Рефы](/guide/v10/refs) для получения дополнительной информации и примеров.
268
+
265
269
## useRef
266
270
267
-
Для получения стабильной ссылки на узел DOM или значение, которое сохраняется между рендерами, мы можем использовать хук `useRef`. Он работает аналогично [createRef](/guide/v10/refs#создание-рефа).
271
+
Для получения стабильной ссылки на узел DOM или значение, которое сохраняется между перерисовками, мы можем использовать хук `useRef`. Он работает аналогично [createRef](/guide/v10/refs#создание-рефа).
> См. [Рефы](/guide/v10/refs) для получения дополнительной информации и примеров.
293
297
298
+
### useImperativeHandle
299
+
300
+
Чтобы изменить реф, переданный в дочерний компонент, мы можем использовать хук `useImperativeHandle`. Он принимает три аргумента: реф для изменения, функцию, которая будет выполнена и вернет новое значение рефа, и массив зависимостей, для определения необходимости повторного выполнения.
// Раскрываем только метод `.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
+
functionApp() {
326
+
constinputRef=useRef(null);
327
+
328
+
consthandleClick= () => {
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
+
294
343
## useContext
295
344
296
-
Для доступа к контексту в функциональном компоненте мы можем использовать хук `useContext`, без каких-либо вышестоящих компонентов или компонентов-оберток. Первым аргументом должен быть объект контекста, созданный в результате вызова `createContext`.
345
+
Для доступа к контексту в функциональном компоненте мы можем использовать хук `useContext`, без каких-либо вышестоящих компонентов или компонентов-обёрток. Первым аргументом должен быть объект контекста, созданный в результате вызова `createContext`.
Copy file name to clipboardexpand all lines: content/ru/guide/v10/refs.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -1,11 +1,11 @@
1
1
---
2
2
name: Рефы
3
-
description: 'Рефы — это способ создания стабильных значений, которые локальны для экземпляра компонента и сохраняются между рендерами.'
3
+
description: 'Рефы — это способ создания стабильных значений, которые локальны для экземпляра компонента и сохраняются между перерисовками.'
4
4
---
5
5
6
6
# Рефы
7
7
8
-
Ссылки на DOM-элементы, или рефы, — это стабильные локальные значения, которые сохраняются между рендерами компонента, но не вызывают повторные рендеры, как это делают состояние или пропсы при их изменении.
8
+
Ссылки на DOM-элементы, или рефы, — это стабильные локальные значения, которые сохраняются между перерисовками компонента, но не вызывают повторные перерисовки, как это делают состояние или пропсы при их изменении.
9
9
10
10
Чаще всего рефы используются для императивного управления DOM, но их можно использовать для хранения любых произвольных локальных значений, которые необходимо сохранить стабильными. Вы можете использовать их для отслеживания предыдущего значения состояния, хранения ссылки на идентификатор интервала или таймаута, или просто для хранения значения счётчика. Важно отметить, что рефы не должны использоваться для логики рендеринга; вместо этого их следует использовать только в методах жизненного цикла и обработчиках событий.
Copy file name to clipboardexpand all lines: content/ru/guide/v10/switching-to-preact.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -22,7 +22,7 @@ description: 'Всё, что нужно знать для перехода с Re
22
22
23
23
## PureComponent
24
24
25
-
Класс `PureComponent` работает аналогично `Component`. Разница в том, что `PureComponent` пропустит рендеринг, когда новые параметры будут равны старым. Для этого мы сравниваем старые и новые параметры посредством поверхностного сравнения, где мы проверяем каждое свойство параметра на ссылочное равенство. Это может значительно ускорить работу приложений, избегая ненужных повторных рендерингов. Это работает путем добавления хука жизненного цикла `shouldComponentUpdate` по умолчанию.
25
+
Класс `PureComponent` работает аналогично `Component`. Разница в том, что `PureComponent` пропустит рендеринг, когда новые параметры будут равны старым. Для этого мы сравниваем старые и новые параметры посредством поверхностного сравнения, где мы проверяем каждое свойство параметра на ссылочное равенство. Это может значительно ускорить работу приложений, избегая ненужных повторных рендерингов. Это работает путём добавления хука жизненного цикла `shouldComponentUpdate` по умолчанию.
Preact генерирует регулярные события DOM. Пока ваш проект TypeScript включает библиотеку `dom` (установите её в `tsconfig.json`), у вас есть доступ ко всем типам событий, которые доступны в вашей текущей конфигурации.
Вы можете ограничить обработчики событий, добавив аннотацию типа `this` к сигнатуре функции в качестве первого аргумента. Этот аргумент будет стерт после транспиляции.
246
+
Если вы предпочитаете встроенные функции, можно обойтись без явного указания текущей цели события, так как она выводится из элемента JSX.
244
247
245
248
```tsx
246
249
exportclassButtonextendsComponent {
247
-
// Добавление этого аргумента ограничивает привязку
0 commit comments