#javascript #html #storybook #storybook-addon-specifications
#javascript #HTML #сборник рассказов #сборник рассказов-дополнение-спецификации
Вопрос:
Я работаю с сборником рассказов для создания компонентов в чистом HTML, CSS и JS (на самом деле jQuery).
Мне интересно, есть ли функция обратного вызова при отображении истории на экране (например useEffect
, для React), потому что мне нужно запускать относительный код jQuery только тогда, когда компонент действительно находится в DOM.
Вот моя ситуация:
// Button.stories.js
// my pure HTML component
const Button = () => `<button>My button </button>`;
export default {
title: 'Buttons',
};
export const ButtonStory = () => Button()
// would be great something like: ButtonStory.callback = function(){ do this}
Есть что-то без обходного пути? (Например, обернуть HTML-компонент внутри компонента react и использовать useEffect для запуска кода)
Спасибо
Ответ №1:
Я поделюсь не оптимальным решением, которое я нашел, но, возможно, может быть полезным для других:
MyStory.stories.js
import {ActionBar} from '../public/components/ActionBar/actionbar.module';
import controller from "!raw-loader!../public/components/ActionBar/controller.js";
import customRenderStory from "../utils/customRenderStory";
export default {
title: 'Basic/ActionBar',
};
//
export const ActionBarToExport= () =>
customRenderStory(
ActionBar(),
controller,
2000
);
customRenderStory.js
export default (component, javascript, timeout) => {
if (javascript !== undefined) setTimeout(() => eval(javascript), timeout)
return component;
}
Таким образом, я могу выполнять код внутри controller.js
при каждом рендеринге истории. Мне нужен тайм-аут (который можно настроить), потому что я не могу быть уверен, что компонент будет смонтирован после выполнения кода.
В моем случае сборник рассказов в обычном HTML и jQuery, похоже, работает.
Комментарии:
1. Спасибо вам за это! Для меня это работает идеально. Я даже смог установить значение
timeout
0
. Я знаю, что это не обычный вариант использования Storybook для работы с jQuery (или даже с ванильным JS), но когда вам это нужно, вам это нужно. Еще раз спасибо!2. Добро пожаловать @TreyPiepmeier. Допустим, я унаследовал этот проект, и первым делом нужно было придать ему больше структуры, представив сборник рассказов 🙂