Обходной путь сборника рассказов для непоследовательного поведения условных элементов управленияJavascript

Форум по Javascript
Ответить
Anonymous
 Обходной путь сборника рассказов для непоследовательного поведения условных элементов управления

Сообщение Anonymous »

Описание проблемы: я использую Storybook в своем приложении React/Next JS в качестве библиотеки компонентов. Я столкнулся с несогласованностью дизайна в том, как Storybook обрабатывает условные элементы управления, в частности, с неспособностью соответствующим образом обновить базовое хранилище аргументов, когда элемент управления условно скрыт. Хотя история отображается нормально, внутреннее хранилище состояний/аргументов становится недействительным с точки зрения TypeScript.
Storybook поддерживает условное скрытие элементов управления в пользовательском интерфейсе на основе значения другого аргумента (например, «показать дополнительные настройки»). Однако, когда эти элементы управления скрыты, соответствующие им аргументы не удаляются и не устанавливаются во внутреннем хранилище как неопределенные — они просто остаются как есть. Это непоследовательно, поскольку, хотя и признавалась необходимость в условных элементах управления, похоже, не учитывалась необходимость решения TypeScript. Да, для того, чтобы правильно справиться с этим по всем направлениям, да, здорово иметь условные элементы управления Storybook, но ТАКЖЕ необходимо решить эту проблему на стороне TypeScript, используя распознаваемые объединения. В результате, поскольку Storybook решает эту проблему только наполовину (скрывая элементы управления в пользовательском интерфейсе и НЕ обновляя хранилище аргументов), это приводит к ошибке TypeScript в json аргументов данной истории. Таким образом, даже если элемент управления скрыт, потому что, например, showAdvanced === false, связанные аргументы (например, AdvancedSetting1) остаются в хранилище аргументов, нарушая ожидаемый тип и вызывая ошибку TypeScript.
Это обнаруживает несогласованность:
Storybook признает необходимость пользовательского интерфейса в условно зависимых элементах управления.
Но он не поддерживает базовую систему типов, которая должна отражать это условие логики в хранилище.
Не хватает способа гарантировать, что когда элемент управления скрыт, его значение может быть явно очищено или удалено — либо путем
разрешения updateArgs({ key: undefined }) устанавливать значение неопределенным, либо путем предоставления какого-либо API или конфигурации для полного удаления аргументов, когда они больше не применяются.
Без этого при использовании условных элементов управления единственное решение, которое я нашел, — это оставить мою историю нетипизированной. Это лучшая практика?
Если только нет какой-то функции или обходного пути со сборниками рассказов, которые я еще не обнаружил...
Шаги по воспроизведению:
Обратите внимание, что тип Story по сути выводит тип из компонента, что означает, что он содержит дискриминируемое объединение AdvancedSettingsT. В результате визуализируем этот сценарий:
  • Определите начальные аргументы, включив в них showAdvanced: false и AdvancedSettings1: undefined. Из-за условного оператора if, используемого в метаобъекте, первоначально будет отображаться только элемент управления showAdvanced.
  • Переключите логический элемент управления showAdvanced в значение true. Это приведет к появлению элемента управления AdvancedSettings1. Затем я могу добавить в это текстовое поле любой текст.
  • Обновить мою историю. Теперь аргументы в истории будут выглядеть так: showAdvanced: true, AdvancedSettings1: "строка настроек", ...
  • Затем обновите логический переключатель showAdvanced обратно на false и снова обновите историю. Когда это происходит, элемент управления AdvancedSettings1 становится скрытым в пользовательском интерфейсе истории, но в json args истории аргументы по-прежнему существуют следующим образом: showAdvanced: false, AdvancedSettings1: "строка настроек", ...
  • В результате этого объект args теперь испытывает ошибку TypeScript. Это связано с тем, что история типизирована так, чтобы соответствовать аргументам компонента, включая распознаваемое объединение, и, согласно распознаваемому объединению, AdvancedSettings1 не может существовать, если showAdvanced имеет значение false.
Итак, я ищу правильный способ действовать. Из-за распространенности и популярности Сборника рассказов кажется неверным, что это всего лишь упущение со стороны Сборника рассказов. Я предполагаю, что я что-то упустил из виду. До сих пор я проделал довольно большой путь, пытаясь использовать декоратор для обновления аргумента AdvancedSettings1 до неопределенного. Это исправит ошибку машинописного текста... однако, похоже, что метод/перехват updateArgs выполняет обновление и исключает ключи arg со значением undef.
Что я могу здесь сделать? Кажется крайне противоречивым, что Storybook поддерживает условно отображаемые элементы управления, но НЕ включает в себя способ обновить их в хранилище args и, таким образом, поддерживать хранилище в соответствии с TypeScript. Есть ли обходной путь или что-то в этом роде? Я предположил, что моим нынешним решением будет исключение шрифта из истории, но мне не нравится идея оставлять мои истории ненапечатанными. Это единственное решение?

Подробнее здесь: https://stackoverflow.com/questions/798 ... s-behavior
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»