Front End Developer @ouicar
Lead Front End Developer @ouicar
S'inspirer du langage Elm.
Un langage :
Une architecture :
Compteur
type alias Model = Int
type Msg = Increment | Decrement
update : Msg -> Model -> Model
update msg model =
case msg of
Increment -> model + 1
Decrement -> model - 1
view : Model -> Html Msg
view model =
div [] [ button [ onClick Decrement ] [ text "-" ]
, div [] [ text (toString model) ]
, button [ onClick Increment ] [ text "+" ] ]
Demo
Comment se rapprocher de cette philosophie en JS ?
On casse tout et on passe à ELM ?
On a décidé de passer à REDUX
et son écosystème
Redux evolves the ideas of Flux, but avoids its complexity by taking cues from Elm.
Documentation Redux.
En Elm :
view : Model -> Html Msg
view model =
div [] [ button [ onClick Decrement ] [ text "-" ]
, div [] [ text (toString model) ]
, button [ onClick Increment ] [ text "+" ] ]
En Javascript : avec le DOM :
Objet avec mutations :/
En Javascript : avec React :
class Counter extends Component {
render() {
return (
{this.props.counter}
);
}
}
La vue devient une fonction :
component : Props -> HTML
Virtual DOM avec diff pour optimiser le rendu :
En Elm :
-- Counter
type alias Model = Int
-- Car
type alias Model =
{ brand : String,
model : String,
km : Int
}
En Javascript :
Pas de typage :/.
En Javascript + Flow :
// Counter
type Model = number;
// Car
type Model = {
brand: string,
model: string,
km: number
};
En Elm :
type Msg = Increment | Decrement
update : Msg -> Model -> Model
update msg model =
case msg of
Increment -> model + 1
Decrement -> model - 1
En Javascript : Action + Reducer
En Javascript : Action + Reducer
Blog technique :
ouicar.github.io