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: content/ru/about/libraries-addons.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -41,6 +41,7 @@ description: Коллекция библиотек и дополнений, ко
41
41
-:ice_cube:**[Kretes](https://kretes.dev/docs/howtos/preact-setup/)**: Разрабатываем full-stack приложения на TypeScript с использованием Preact и Node.js
42
42
- 🏝: **[preact-island](https://github.com/mwood23/preact-island)**: Запускаем виджет Preact на любом веб-сайте с реактивными пропсами.
43
43
- 🧩 **[ziko-wrapper](https://github.com/zakarialaoui10/ziko-wrapper)**: Оборачиваем ваши компоненты [ZikoJS](https://github.com/zakarialaoui10/zikojs) внутри Preact-приложения — и наоборот.
44
+
- 💤 **[zikofy](https://github.com/zakarialaoui10/zikofy)**: Превращает компоненты Preact в `UIElement` из Zikojs.
44
45
45
46
## Инструментальные средства графического интерфейса
Убедитесь, что переменная `NODE_ENV` имеет правильное значение в вашем инструменте сборки.
62
62
63
+
## Отладка сигналов
64
+
65
+
Если вы используете Preact Signals в своём приложении, доступны специализированные инструменты для отладки:
66
+
67
+
-**[Signals Debug](https://github.com/preactjs/signals/blob/main/packages/debug)** — Инструмент разработки, который предоставляет подробный вывод в консоль об обновлениях сигналов, выполнении эффектов и пересчётах вычисляемых значений.
68
+
-**[Signals DevTools](https://github.com/preactjs/signals/blob/main/packages/devtools-ui)** — Визуальный интерфейс DevTools для отладки и визуализации Preact Signals в реальном времени. Его можно встроить прямо на страницу для демонстраций или интегрировать в собственные инструменты.
69
+
70
+
> **Примечание:** Это инструменты, независимые от фреймворка, из библиотеки Signals. Хотя они отлично работают с Preact, они не являются специфичными именно для Preact.
71
+
63
72
## Предупреждения и ошибки отладки
64
73
65
74
Иногда могут появляться предупреждения или ошибки, когда Preact обнаруживает недействительный код. Их необходимо исправить, чтобы обеспечить безупречную работу приложения.
Copy file name to clipboardExpand all lines: content/ru/guide/v10/signals.md
+279-2Lines changed: 279 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -498,6 +498,51 @@ function Optimized() {
498
498
499
499
Аналогичная оптимизация рендеринга также поддерживается при передаче сигналов в качестве атрибута в элементах DOM.
500
500
501
+
## Модели
502
+
503
+
Модели предоставляют структурированный способ создания реактивных контейнеров состояния, которые инкапсулируют сигналы, вычисляемые значения, эффекты и действия. Они предлагают чистый паттерн для организации сложной логики состояния, обеспечивая при этом автоматическую очистку и пакетные обновления.
504
+
505
+
По мере роста сложности приложений управление состоянием с помощью отдельных сигналов может стать неудобным. Модели решают эту проблему, объединяя связанные сигналы, вычисляемые значения и действия в цельные единицы. Это делает ваш код более поддерживаемым, тестируемым и понятным.
506
+
507
+
### Зачем использовать модели?
508
+
509
+
Модели дают несколько ключевых преимуществ:
510
+
511
+
-**Инкапсуляция**: Группируют связанное состояние и логику вместе, делая очевидным, что к чему относится
512
+
-**Автоматическая очистка**: Эффекты, созданные в моделях, автоматически удаляются при уничтожении модели, предотвращая утечки памяти
513
+
-**Автоматическая пакетная обработка**: Все методы автоматически оборачиваются как действия, обеспечивая оптимальную производительность
514
+
-**Компонуемость**: Модели можно вкладывать друг в друга и комбинировать, при этом родительские модели автоматически управляют жизненным циклом дочерних
515
+
-**Повторное использование**: Модели могут принимать параметры инициализации, что делает их пригодными для повторного использования в разных контекстах
516
+
-**Тестируемость**: Модели можно создавать и тестировать изолированно, без необходимости рендеринга компонентов
517
+
518
+
Вот простой пример, показывающий, как модели организуют состояние:
Подробнее о том, как использовать модели в ваших компонентах, и полная справочная информация по API — см. [API моделей](#createmodelfactory) в разделе API ниже.
545
+
501
546
## API
502
547
503
548
В этом разделе представлен обзор API сигналов. Он призван стать кратким справочником для людей, которые уже знают, как использовать сигналы, и нуждаются в напоминании о том, что доступно.
@@ -594,8 +639,8 @@ batch(() => {
594
639
Функция `untracked(fn)` может быть использована для доступа к значению нескольких сигналов без подписки на них.
595
640
596
641
```js
597
-
constname=signal("Jane");
598
-
constsurname=signal("Doe");
642
+
constname=signal("Джейн");
643
+
constsurname=signal("Доу");
599
644
600
645
effect(() => {
601
646
untracked(() => {
@@ -604,6 +649,229 @@ effect(() => {
604
649
})
605
650
```
606
651
652
+
### createModel(factory)
653
+
654
+
Функция `createModel(factory)` создаёт конструктор модели из фабричной функции. Фабричная функция может принимать аргументы для инициализации и должна возвращать объект, содержащий сигналы, вычисляемые значения и методы-действия.
counter.increment(); // Обновления автоматически группируются в пакет
682
+
console.log(counter.count.value); // 6
683
+
console.log(counter.doubled.value); // 12
684
+
685
+
// Очищаем все эффекты, когда закончили
686
+
counter[Symbol.dispose]();
687
+
```
688
+
689
+
#### Ключевые возможности
690
+
691
+
-**Аргументы фабрики**: Фабричные функции могут принимать аргументы для инициализации, что делает модели повторно используемыми с разными конфигурациями.
692
+
-**Автоматическая пакетная обработка**: Все методы, возвращаемые из фабрики, автоматически оборачиваются как действия, поэтому обновления состояния внутри них группируются в пакет и не отслеживаются.
693
+
-**Автоматическая очистка эффектов**: Эффекты, созданные при построении модели, захватываются и автоматически удаляются при уничтожении модели через `Symbol.dispose`.
694
+
-**Компонуемые модели**: Модели естественно компонуются — эффекты из вложенных моделей захватываются родительской и удаляются вместе с ней при уничтожении родителя.
695
+
696
+
#### Композиция моделей
697
+
698
+
Модели можно вкладывать друг в друга. При уничтожении родительской модели все эффекты из вложенных моделей автоматически очищаются:
699
+
700
+
```js
701
+
constTodoItemModel=createModel((text) => {
702
+
constcompleted=signal(false);
703
+
704
+
return {
705
+
text,
706
+
completed,
707
+
toggle() {
708
+
completed.value=!completed.value;
709
+
}
710
+
};
711
+
});
712
+
713
+
constTodoListModel=createModel(() => {
714
+
constitems=signal([]);
715
+
716
+
return {
717
+
items,
718
+
addTodo(text) {
719
+
consttodo=newTodoItemModel(text);
720
+
items.value= [...items.value, todo];
721
+
},
722
+
removeTodo(todo) {
723
+
items.value=items.value.filter(t=> t !== todo);
724
+
todo[Symbol.dispose]();
725
+
}
726
+
};
727
+
});
728
+
729
+
consttodoList=newTodoListModel();
730
+
todoList.addTodo('Купить продукты');
731
+
todoList.addTodo('Выгулять собаку');
732
+
733
+
// Уничтожение родительской модели также очищает все эффекты вложенных моделей
734
+
todoList[Symbol.dispose]();
735
+
```
736
+
737
+
### action(fn)
738
+
739
+
Функция `action(fn)` оборачивает функцию для выполнения в пакетном и неотслеживаемом контексте. Это полезно, когда нужно создать самостоятельные действия вне модели:
740
+
741
+
```js
742
+
import { signal, action } from'@preact/signals';
743
+
744
+
constcount=signal(0);
745
+
746
+
constincrementBy=action((amount) => {
747
+
count.value+= amount;
748
+
});
749
+
750
+
incrementBy(5); // Пакетное обновление
751
+
```
752
+
753
+
### useModel(modelOrFactory)
754
+
755
+
Хук `useModel` доступен как в пакете `@preact/signals`, так и в `@preact/signals-react`. Он отвечает за создание экземпляра модели при первом рендере, сохранение того же экземпляра при последующих перерисовках и автоматическое уничтожение модели при размонтировании компонента.
Для лучшей инкапсуляции объявляйте интерфейс вашей модели явно и используйте `ReadonlySignal` для сигналов, которые должны изменяться только через экшены:
counter.count.value=10; // Ошибка TypeScript: Cannot assign to 'value'
836
+
```
837
+
838
+
#### Пользовательская логика уничтожения
839
+
840
+
Если вашей модели требуется пользовательская логика очистки, не связанная с сигналами (например, закрытие WebSocket-соединений), используйте эффект без зависимостей, который возвращает функцию очистки:
841
+
842
+
```js
843
+
constWebSocketModel=createModel((url) => {
844
+
constmessages=signal([]);
845
+
constws=newWebSocket(url);
846
+
847
+
ws.onmessage= (e) => {
848
+
messages.value= [...messages.value, e.data];
849
+
};
850
+
851
+
// Этот эффект выполняется один раз; его очистка запускается при уничтожении
Этот паттерн аналогичен `useEffect(() => { return cleanup }, [])` в React и гарантирует, что очистка происходит автоматически при композиции моделей — родительским моделям не нужно знать о функциях уничтожения вложенных моделей.
874
+
607
875
## Вспомогательные компоненты и хуки
608
876
609
877
Начиная с версии v2.1.0, пакет `@preact/signals/utils` предоставляет дополнительные вспомогательные компоненты и хуки, упрощающие работу с сигналами.
@@ -693,3 +961,12 @@ function Component() {
693
961
);
694
962
}
695
963
```
964
+
965
+
## Отладка
966
+
967
+
Если вы используете Preact Signals в своём приложении, доступны специализированные инструменты для отладки:
968
+
969
+
- **[Signals Debug](https://github.com/preactjs/signals/blob/main/packages/debug)** — Инструмент разработки, который предоставляет подробный вывод в консоль об обновлениях сигналов, выполнении эффектов и пересчётах вычисляемых значений.
970
+
- **[Signals DevTools](https://github.com/preactjs/signals/blob/main/packages/devtools-ui)** — Визуальный интерфейс DevTools для отладки и визуализации Preact Signals в реальном времени. Его можно встроить прямо на страницу для демонстраций или интегрировать в собственные инструменты.
971
+
972
+
> **Примечание:** Это инструменты, независимые от фреймворка, из библиотеки Signals. Хотя они отлично работают с Preact, они не являются специфичными именно для Preact.
Убедитесь, что переменная `NODE_ENV` имеет правильное значение в вашем инструменте сборки.
62
62
63
+
## Отладка сигналов
64
+
65
+
Если вы используете Preact Signals в своём приложении, доступны специализированные инструменты для отладки:
66
+
67
+
-**[Signals Debug](https://github.com/preactjs/signals/blob/main/packages/debug)** — Инструмент разработки, который предоставляет подробный вывод в консоль об обновлениях сигналов, выполнении эффектов и пересчётах вычисляемых значений.
68
+
-**[Signals DevTools](https://github.com/preactjs/signals/blob/main/packages/devtools-ui)** — Визуальный интерфейс DevTools для отладки и визуализации Preact Signals в реальном времени. Его можно встроить прямо на страницу для демонстраций или интегрировать в собственные инструменты.
69
+
70
+
> **Примечание:** Это инструменты, независимые от фреймворка, из библиотеки Signals. Хотя они отлично работают с Preact, они не являются специфичными именно для Preact.
71
+
63
72
## Предупреждения и ошибки отладки
64
73
65
74
Иногда могут появляться предупреждения или ошибки, когда Preact обнаруживает недействительный код. Их необходимо исправить, чтобы обеспечить безупречную работу приложения.
0 commit comments