ROBBESTAD ARCHIVErecovered 2026-09-01

ARCHIVE FILE

Funksjonell reaktiv programmering

written
archived
source
talks (2014–2016)

JavaZone, 10. september 2014. Jeg var seniorkonsulent i Inmeta og skulle vise at React.js kan bære både det funksjonelle og det reaktive, i samme time.

React var 0.11.1. Facebook hadde laget det, Instagram kjørte det. JavaScript støtter allerede en del av det som kjennetegner et funksjonelt språk — funksjoner som first class citizens, lambda — men ikke alt. Du kan programmere objektorientert om du vil, eller noe midt imellom. Reaktiv programmering handler om endringer i tilstand. Poenget med timen var å gjøre den utviklingen enklere, ikke å innføre et nytt religionsskrift.

Første demo var så liten at den nesten ikke finnes:

/** @jsx React.DOM */
var HalloVerden = React.createClass({
    render: function() {
        return <div>Hallo Verden</div>;
    }
});
React.renderComponent(<HalloVerden name="hallo" />, document.body);

Andre demo var en knapp som husker at den er trykket:

var KlikkMeg = React.createClass({
    getInitialState: function () {
        return {clicked: false};
    },
    handleClick: function () {
        this.setState({clicked: !this.state.clicked});
    },
    render: function () {
        return <input type="button"
            onClick={this.handleClick}
            value={!this.state.clicked ? "Klikk meg!" : "En gang til"} />;
    }
});

Deretter en boks du kan dra. Native events mot React-events, side om side. Tittelen på den fila var «Demo: Synthetic Reactive Events». Layout av kollisjoner i et kalendergrid er én type problem. Å la en komponent eie musen sin er en annen. Begge ender i det samme: du vil ikke ha den tilstanden liggende i window.

Bak kulissene lager React en beregning av hvilke elementer som må endres. Virtuell DOM. Syntetiske events. JSX som kompileres til JavaScript. Det er hele maskineriet. Resten av timen var å vise at du kan skrive små enheter, teste dem, og la appen være så kompleks som den mest komplekse komponenten — ikke mer.

Keynoten ligger fortsatt i arkivet. Demokoden også: halloverden, klikkmeg, mouse, en søkeapp. Det som ble igjen i hodet etterpå, og som senere ble SvenJS, var ikke Facebook. Det var modellen: createClass, setState, render hele treet, la runtime finne ut hva som faktisk måtte røres.

← index