У компонента должны быть описаны все props через propTypes.
У каждого компонента должен быть Readme.md файл с примерами использования и документацией к публичным методам, если они имеются.
Предпочтительно api через props.children.
Плохо:
<Menu items={[{ title: 'one', value: 1}, { title: 'two', value: 2 }]} />
Хорошо:
<Menu>
<MenuItem value={1}>
One
</MenuItem>
<MenuItem value={1}>
Two
</MenuItem>
</Menu>
- Запускается storybook.
- Добавляется кейс использования в story.jsx.
import React from 'react';
import { storiesOf, action } from '@kadira/storybook';
import Button from './Button.jsx';
storiesOf('Button', module)
.addWithInfo('Button default view', 'Default Button with click handler', () => (
<Button onClick={ action('button clicked') }>
Hello!!!
</Button>
))
- Имплементируется кейс.
- При необходимости кейс переносится как пример использования в Readme.md.
Для стилей комонентов используется библиотека jss и плагин jss-nested, префиксы проставляются автоматически через плагин jss-vendor-prefixer.
import { StyleSheet, css } from '../helpers/styles';
const ExampleDIV = () => (
<div className={css(styles.root)}>Some awesome red color div</div>
)
const styles = StyleSheet.create({
root: {
background: 'red',
color: '#fff',
width: '16px',
height: '16px'
}
});
Если компонент предполагает передачу css стилей с верху, то у него должен быть имплементирован styles через props (prop.styles).
prop.styles - массив объектов стилей, которые являются аргументами для метода css, например styles.root из примера выше.
import { StyleSheet, css } from '../helpers/styles';
const ExampleDIV = (props) => (
<div className={css(styles.root, props.isActive && styles.active)}>
Some awesome red color div
</div>
)
const styles = StyleSheet.create({
root: {
background: 'red',
color: '#fff',
width: '16px',
height: '16px'
},
active: {
background: 'blue',
width: '18px',
height: '18px'
}
});
import { StyleSheet, css } from '../helpers/styles';
const ExampleDIV = (props) => {
const size = (props.size || 'm').toUpperCase();
return (
<div className={css(styles.root, styles[`size${size}`])}>
Some awesome red color div
</div>
)
}
const styles = StyleSheet.create({
root: {
background: 'red',
color: '#fff'
},
sizeM: {
width: '16px',
height: '16px'
},
sizeL: {
width: '36px',
height: '36px'
}
});
import { StyleSheet, css } from '../helpers/styles';
import { View } from '../View';
const SomeWrapper = (props) => {
const childElem = props.childElem;
return (
<View className={css(styles.root])}>
{childElem}
</div>
)
}
});