#reactjs #storybook
#reactjs #сборник рассказов
Вопрос:
Я разрабатываю компонент для проекта React в сборнике рассказов, но нажатие кнопки ничего не регистрирует на панели действий. Почему действие не регистрируется?
Истории…
// Button.stories.js
import React from 'react'
import Button from '../components/Button'
export default {
title: 'Button',
argTypes: { onClick: { action: 'clicked' } }
}
const Template = args => <Button {...args} />
export const Primary = Template.bind({})
Primary.args = {
primary: true,
label: 'Button'
}
и компонент…
// Button.jsx
function Button() {
const clickHandler = () => {
alert('!')
}
return (
<button className='button' onClick={clickHandler}>
Button
</button>
)
}
Комментарии:
1. Я не вижу ничего плохого в коде истории, вы уверены, что используете
onClick
метод внутри своего компонента button?2. Да. Это работает (срабатывает предупреждение), но ничего не регистрируется. Я обновил вопрос, чтобы включить код компонента.
Ответ №1:
Вы не передаете onClickHandler компоненту кнопки, вставляете {onClickHandler}
аргументы кнопки
А затем передайте его в onClick prop в отображаемом элементе DOM.
Таким образом, он сделает его обработчиком щелчка, доступным для сборника рассказов, а затем может быть зарегистрирован с помощью действий сборника рассказов.
Комментарии:
1. Можете ли вы предоставить фрагмент кода?
Ответ №2:
Если вы не хотите обрабатывать все действия вручную, используйте argTypesRegex
so, чтобы они выводились автоматически.
Автоматическое сопоставление аргументов
Другой вариант — использовать параметр для сопоставления всех типов аргументов, которые соответствуют определенному шаблону. Следующая конфигурация автоматически создает действия для каждого в argType (которые вы можете либо указать вручную, либо вывести автоматически).
preview.js/ts
позволяет записывать регулярные выражения
Примеры:
// preview.ts
export const parameters = {
actions: { argTypesRegex: '^on.*' }
};
// preview.js
export default {
parameters: { actions: { argTypesRegex: '^on.*' } },
};