#javascript #reactjs #storybook
#javascript #reactjs #сборник рассказов
Вопрос:
Итак, у меня есть история в сборнике рассказов, вот так:
export const One = Template.bind();
One.args = {
children: [
<MyComponent {...Icon.args} headerText={"Header"} />,
<MyComponent {...Standard.args} />
]
};
Скажем Standard.args
, у меня получается выглядеть так:
Standard.args = {
headerText: "Default Header",
detailText: "Default details"
};
Я хотел бы иметь возможность устанавливать detailText
значение, используя отдельный аргумент, но не знаю, как это сделать. Что-то вроде приведенного ниже, но, очевидно, с рабочим синтаксисом:
export const One = Template.bind();
One.args = {
detailText: "new detail text",
children: [
<MyComponent {...Icon.args} headerText={"Header"} />,
<MyComponent {...Standard.args} detailText={detailText} />
]
};
Возможно ли это?
Комментарии:
1. вы решили эту проблему?
2. Нет, я думаю, что в итоге мне пришлось сделать больше сочиненной истории со всеми реквизитами на одном уровне
Ответ №1:
Я использую этот обходной путь, который работает для меня. Сначала я определяю вложенное содержимое:
const ContentOne = () => (<div>This is content one.</div>);
const ContentTwo = () => (<div>This is content two.</div>);
Затем я создаю шаблоны для каждого содержимого:
const TemplateOne = (args) => (
<YourComponent {...args}>
<ContentOne />
</YourComponent>
)
const TemplateTwo = (args) => (
<YourComponent {...args}>
<ContentTwo />
</YourComponent>
)
И, наконец, я экспортирую компоненты:
export const ComponentOne = TemplateOne.bind({});
ComponentOne.args = {
detailText: "One detail text",
};
export const ComponentTwo = TemplateTwo.bind({});
ComponentTwo.args = {
detailText: "Two detail text",
};