Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: state, synchronization

Как организовать синхронизацию состояния Canvas и UI-панели слоёв?

Вопрос нужен, чтобы понять, как кандидат разделяет состояние данных и визуальное представление.

Короткий ответ

Canvas не хранит состояние в декларативном виде, поэтому его нужно выносить во внешний state. UI-панель слоёв работает с этим состоянием, а Canvas лишь отражает его. Любые изменения должны идти через единый источник данных. Canvas и UI подписываются на одно и то же состояние.

Длинный ответ

Canvas — императивный API, а UI в React — декларативный. Это ключевое противоречие, которое нужно решить архитектурно.

Базовый принцип

Состояние сцены должно быть:

  • вне Canvas

  • сериализуемым

  • единым для UI и Canvas

Canvas не является источником истины.

Типичная архитектура

  1. Единое состояние сцены

    • массив слоёв

    • свойства объектов

    • порядок отрисовки

  2. UI-панель слоёв

    • читает состояние

    • инициирует изменения (visibility, order, select)

  3. Canvas-адаптер

    • слушает изменения state

    • применяет их к Canvas API

Поток данных

  • UI → state → Canvas

  • Canvas events → state → UI

Практический пример логики

// изменение видимости слоя
setLayers(prev => updateVisibility(prev, id))

Canvas при этом:

  • получает новое состояние

  • перерисовывает сцену или объект

Краткий вывод

Canvas не должен быть источником состояния. Синхронизация достигается через внешний state, который управляет и UI, и отрисовкой, обеспечивая предсказуемость и масштабируемость.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • React

    React

Ключевые слова

#state

#synchronization

Подпишись на React Developer в телеграм