Espen Henriksen
Senior Engineer
Statens Kartverk

esphen_

esphen
espen.dev
Komponentbasert utvikling

La oss prate komponenter
Konseptuelt

Atomic Design


React-komponenter
- Byggestenen i react
- Komponenter er funksjoner av props til html
- En knapp kan være en komponent, en hel side også en komponent
- Hvordan håndtere "komponenter at scale"?
Komponenter i praksis



Setter opp en side

SIden vokser


.. Ut av kontroll




Problemer
- Mye kompleksitet å forholde seg til
- En endring skaper bølger
- Avhengig av backend-data for frontend-endringer
- Dokumentasjon en ettertanke
- Universell utforming
- Lettere å lage nytt enn gjenbruk
- Testing av komponenter vanskelig

Finnes det bedre løsninger?

Storybook
- Utvikle komponenter i isolasjon
- Komponenter har mange states, representert med stories
- Hot reloading
- Genererer dokumentasjon som kan deles med andre
- Håndskreven doc i MDX
- Tester: A11y, Interaksjon, snapshot, unit
- Addons: Figma, Jira, msw..

Setup
npm create react-app .
npx @storybook/cli init
npm run dev
Komponent
import { ButtonHTMLAttributes } from 'react';
import StyledButton from './style';
export interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {
/** This is a description of primary */
primary?: boolean;
size?: 'small' | 'medium' | 'large';
children?: React.ReactNode;
}
export const Button = ({
primary = false,
size = 'medium',
children,
...props
}: Props) => (
<StyledButton {...props} primary={primary} size={size}>
{children}
</StyledButton>
)
Story
import { ComponentStory, ComponentMeta } from '@storybook/react';
import { Button } from "ui";
export default {
title: 'Example/Button',
component: Button,
} as ComponentMeta<typeof Button>;
const Template: ComponentStory<typeof Button> = (args) => (
<Button {...args} />
);
export const Primary = Template.bind({});
Primary.args = {
primary: true,
children: 'Button',
};
export const Secondary = Template.bind({});
Secondary.args = {
children: 'Button',
};

Demo



Bonus DevEx

Direkte feedback i PR

Cross browser testing

Demo: Visuelle differ



På tide å starte med komponentbasert utvikling!

Fin
https://slides.com/esphen/komponentbasert-utvikling
Komponentbasert utvikling
By Eline H
Komponentbasert utvikling
- 72