React storybook

jairtrejo 859 views 38 slides Oct 10, 2016
Slide 1
Slide 1 of 38
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38

About This Presentation

A tour of React Storybook, a tool to develop React Components in isolation. It focuses on how it's been useful to me in developing React Native applications.


Slide Content

STORYBOOK
&
REACT NATIVE
Jair Trejo

WHO AM I?
Jair Trejo
Full-stack developer at Chegg
@jairtrejo on Twitter
2

WHAT IS REACT
STORYBOOK?

4

5
import React from 'react';
import { View } from 'react-native';
import { storiesOf, action } from '@kadira/react-native-storybook';
import { SpeechBubble } from ‘../../components/SpeechBubble’;
storiesOf(‘SpeechBubble');
.add('default view', () => (
<View style={{width: 300}}>
<SpeechBubble message="Default, explanatory bubble"
severity={ SpeechBubble.SEVERITY.INFO }
tailPosition={ 50 }/>
</View>
))
.add('warning', () => (
<SpeechBubble message="Watch out! Something unexpected just happened"
severity={ SpeechBubble.SEVERITY.WARNING }
tailPosition={ 50 }/>
));

6

7
A tight feedback loop for
developing new components and
new states for those components.

8
A clear, convenient place to
communicate and collaborate with
designers.

9
A place where you can visually
check that everything works and
looks as intended.

HOW IS IT USEFUL TO ME?

REACT NATIVE STORYBOOK
11

12

13

14

15

16
const simpleFavorite = new Favorite({
id: '1',
title: 'Learning React Native…’,
url: 'https://amzn.com/1491929006',
shortUrl: 'amazon.com/gp/product/149…',
source: new Source({
type: 'tweet',
id: '707050076170891264',
from: new Friend({
name: 'Bonnie Eisenman',
username: 'brindelle'
})
}),
});
storiesOf('FavoriteDetail')
.add('default view', () => (
<FavoriteDetail favorite={ simpleFavorite }
onBack={ action('Go back') }
onFavoritePress={ action('Favorite pressed') }
onShare={ action('Share') }/>
));

17
linkTo

18

19

20

21

22
State
HTML
VDom
UI

23

24
export default connectComponent(
(state$) => ({
favorites: state$.map('.getIn', ['feed', 'favorites']),
refreshing: state$.map('.getIn', ['feed', 'lastetched'])
.map(d => d === null)
}),
() => ({
onFavoritePressed: asActionType('FAVORITE_SELECTED'),
onRefresh: asActionType('FETCH_FAVORITES'),
})
)(Feed);

25
export class Feed extends Component{
. . .
}
export default connectComponent(
. . .
)(eed);

26

27

28

HOW CAN YOU START
USING IT?

KADIRAHQ/REACT-STORYBOOK
30

31

32
import { storiesOf, action } from '@kadira/react-native-storybook';
import { Favorite } from '../../components/Favorite';
storiesOf('Favorite')
.add('default view', () => (
<FavoriteComponent favorite={ simpleFavorite }
onPress={ action('Favorite pressed') }/>
));

33
storiesOf('Favorite')
.addDecorator((story) => (
<View style={{
flexDirection: 'column',
alignItems: 'stretch',
justifyContent: 'center',
flex: 1}}
>
{ story() }
</View>
));

34

35

36

37
A tight feedback loop for
developing new components
and new states for those
components.
A clear, convenient place to
communicate and collaborate
with designers.
A place where you can visually
check that everything works and
looks as intended.

THANK YOU!
Let’s stay in touch: @jairtrejo