Использование React Context с react-konva

Общее состояние означает, что изменения в левом меню могут обновлять данные, используемые для отображения компонентов экрана на карте пути пользователя.

Следуя моему сообщению об использовании react-konvaкак части reciprocal.dev для создания карты пути пользователя , а затем добавив масштабирование и панорамирование к указанной карте, я решил добавить некоторые улучшения для изменения свойств компонентов, отображаемых на холсте из-за пределов холста.

Чтобы реализовать это улучшение, мне нужно было ввести состояние для всего приложения, чтобы я мог отслеживать как взаимодействие в пользовательском интерфейсе без холста, так и обновлять значение в компонентах холста.

Чтобы сделать это, я начал с создания контекста, к которому я мог затем получить доступ, используя useContextхук в компонентах, которые должны были получить доступ к свойствам, предоставляемым контекстом для изменения состояния приложения.

Я добавил поставщика контекста на уровне корневого компонента, чтобы дочерние компоненты могли получить доступ к контексту, и хотя это хорошо работало с элементами пользовательского интерфейса, которые я создал для отображения информации на экране, это не работало с компонентами на холсте.

Компоненты, которые были Stageдочерними элементами используемых для рендеринга элементов холста, не могли получить доступ к этим свойствам из-за проблем с областью действия.

Доступ к React Context на этапе react-konva

Исправление для решения проблемы с областью действия относительно простое, оно просто требует настройки другого поставщика контекста внутри файла Stage.

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

Когда у нас есть провайдер внутри, Stageмы можем использовать useContextхук внутри компонентов, которые будут отображаться на холсте.

Окончательная структура выглядит так:

Использование контекста React для обновления элементов пользовательского интерфейса при изменении состояния

Имея контекст, доступный изнутри холста, мы можем использовать этот контекст для обновления общего состояния между элементами пользовательского интерфейса вне холста и внутри него.

Во-первых, нам нужно иметь какие-то средства для получения и установки значения, которое будет обновляться через пользовательский интерфейс без холста. Для этого мы используем useStateдля отслеживания вызываемого значения, colourа также средства получения и установки этого значения для поставщика через его значение.

Это значение цвета изменяется внутри пользовательского интерфейса без холста, который мы вызываем setColourвсякий раз, когда пользователь выбирает значение из элемента выбора цвета.

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

Как только мы получили значение цвета, считываемое компонентом холста и устанавливаемое компонентом, не являющимся холстом, теперь мы можем установить цвет с Rectпомощью поля выбора.

Резюме

Хотя в этом посте рассматривается очень простой вариант использования, нет никаких причин, по которым вы не могли бы использовать контекст React для отслеживания состояния ряда значений и создания расширенного пользовательского интерфейса, который позволяет пользователю обновлять объекты внутри холста извне.

Вы можете найти демонстрацию общего состояния в примере User Journey Map , который я создал как часть reciprocal.dev , так как он использует подход, упомянутый в этом посте, для отслеживания состояния приложения между пользовательским интерфейсом без холста и основным холстом. .

Suggested posts

Поиск информации о доменных именах

Отрывок из книги «Маленькие программные инструменты Sharp» Брайана П. Хогана.

Поиск информации о доменных именах

Когда вы делаете запрос на facebook.com, ваш компьютер ищет доменное имя, чтобы преобразовать это доменное имя в IP-адрес, чтобы ваш компьютер мог установить это соединение.

Как избежать разрушительных последствий инсульта: уроки семейного опыта.

Как избежать разрушительных последствий инсульта: уроки семейного опыта.

Введение Инсульт — это неотложная медицинская помощь, которая может случиться с кем угодно в любое время. Это происходит, когда приток крови к части мозга нарушается, что приводит к внезапной потере функции мозга.

Related posts

Обучение на рабочей неделе важнее, чем вы думаете

Обучение на рабочей неделе важнее, чем вы думаете

Мы часто обнаруживаем, что изо всех сил пытаемся реализовать то, что, как мы знаем, полезно для нас. От того, чтобы сказать значимому другому, что мы любим его, до того, чтобы помнить, что нужно говорить как пират, всегда будут те, кто утверждает, что день, неделя или месяц событий не нужны, потому что они уже делают эти вещи.

Что делает подкаст влиятельным?

Что делает подкаст влиятельным?

На прошлой неделе я заметил пресс-релиз, разосланный через PressGazette (новостной веб-сайт британских СМИ). В статье сообщалось, что Acast, скандинавская компания по размещению и рекламе подкастов, возглавит консорциум «вероятно, самых влиятельных» издателей подкастинга.

Революция на рабочем месте: ведущие эксперты обсуждают гибридную и удаленную работу

Революция на рабочем месте: ведущие эксперты обсуждают гибридную и удаленную работу

В сегодняшнем быстро развивающемся бизнес-ландшафте концепция гибридной и удаленной работы приобрела беспрецедентный импульс. Поскольку компании продолжают приспосабливаться к меняющимся потребностям и ожиданиям своих сотрудников, эксперты из разных областей собрались вместе, чтобы обсудить преимущества, проблемы и будущее этого преобразующего способа работы.

Первая детская книга о кайфе

Первая детская книга о кайфе

(Предупреждение — это сатира, предназначенная для радостной подрывной деятельности — определенно не для детей) Вы видели, как ваши мама и папа прячутся на кухне и курят эти вонючие сигареты. Они говорят вам.