Lekce 1.0

Úvod do Reactu

Když React v roce 2013 poprvé vyšlo, vývojáři ho opravdu neměli rádi. Na první pohled ta reakce dávala smysl — React nevypadal jako žádný nástroj, který vývojáři tehdy znali.

Co se naučíte
  • Jak vypadal vývoj webu před Reactem
  • Proč byl React zpočátku kontroverzní
  • Klíčové inovace, které React přinesl
  • Jak JSX změnil způsob, jakým píšeme UI
  • Proč je React dnes dominantní

Web před Reactem

Na začátku roku 2010 byl front-end vývoj úplně jiný svět. Dominovaly tři technologie:

jQuery

Král DOM manipulace

Backbone.js

Minimalismus a MVC

AngularJS

Framework se vším všudy

jQuery: Král DOM manipulace

jQuery přijalo realitu webu: strom DOM uzlů. "Stav" vaší aplikace fakticky žil v samotném DOM. Aktualizace UI znamenala:

  • 1.Najít správný DOM uzel
  • 2.Zmutovat ho
  • 3.Doufat, že jste něco jinde nerozbili
javascript
// jQuery example - imperative DOM manipulation
$('#submit-btn').click(function() {
  var name = $('#name-input').val();
  if (name) {
    $('#greeting').text('Hello, ' + name + '!');
    $('#greeting').show();
    $('#name-input').val('');
  }
});

jQuery revolucionalizovalo kompatibilitu prohlížečů a ergonomii vývojářů... ale také vytvořilo svět sdíleného mutabilního stavu. Jak aplikace rostly, tento stav se stal nemožným sledovat. jQuery projekty se často zvrhly v nepředvídatelný "špagetový kód."

Problém

Web potřeboval více struktury. Sdílený mutabilní stav znemožňoval porozumění složitým aplikacím.

Backbone.js: Minimalismus a vzestup MVC

Backbone.js představil lehkou, JavaScript-přátelskou verzi MVC:

  • Modely uchovávaly stav aplikace
  • Pohledy se překreslily při změně modelu
javascript
// Backbone.js example
var UserModel = Backbone.Model.extend({
  defaults: {
    name: '',
    email: ''
  }
});

var UserView = Backbone.View.extend({
  render: function() {
    // Developer had to define their own rendering logic
    this.$el.html('<h1>' + this.model.get('name') + '</h1>');
    return this;
  }
});

S pouhými ~2 000 řádky kódu byl záměrně minimální a bez názoru. Tak bez názoru, že výchozí metoda render() v Backbone nic nedělala. Vývojáři museli definovat vlastní strategie vykreslování a šablon.

Klíčový postřeh

Backbone přinesl pořádek — ale stále kladl velkou zátěž na vývojáře.

AngularJS: "Co kdyby HTML bylo mocnější?"

AngularJS zvolil opačný přístup. Byl to plně názorový framework se vším potřebným:

Obousměrná vazba dat
Šablony
Routování
Dependency Injection
Filtry
Vestavěné DOM nástroje
javascript
<!-- AngularJS example - two-way data binding -->
<div ng-app="myApp" ng-controller="myCtrl">
  <input ng-model="name">
  <p>Hello, {{name}}!</p>
</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  $scope.name = 'World';
});
</script>

Bylo to neuvěřitelně mocné, zejména pro backend vývojáře, kteří najednou měli stavět frontendy. Ale největší vlastnost Angularu byla také jeho největší problém:

Obousměrná vazba dat
  • Pohled aktualizoval model
  • Model aktualizoval pohled
  • Angular neustále skenoval změny

To často vedlo k implicitním změnám stavu, problémům s výkonem a nočním můrám při ladění.

Společný problém: Mutace všude

Navzdory jejich rozdílům, téměř všechny frameworky té doby sdílely jednu charakteristiku:

Stavové, mutabilní modely synchronizované s pohledem

Mutace činila složité aplikace obtížnějšími k pochopení a údržbě. Vývojáři potřebovali lepší mentální model. A přesně to React představil.

Průlom Reactu: UI jako čistá funkce stavu

Jednou z klíčových inovací Reactu byla myšlenka, že vaše UI je funkce vašeho stavu:

v = f(s)

pohled = funkce(stav)

Místo manuální manipulace s DOM:

  • 1.Aktualizujete stav
  • 2.React vymyslí, jak by UI mělo vypadat

Výsledek

Tento posun eliminoval celé třídy chyb způsobených neřízenými mutacemi.

Komponenty: Funkcionální myšlení pro UI

React zabalil tuto myšlenku do architektury založené na komponentách. Komponenty:

Přijímají props (vstupy)
Spravují interní stav
Vracejí popis UI
Skládají se jako funkce
javascript
// React component - declarative UI
function Greeting({ name }) {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>Hello, {name}!</h1>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

Klíčový postřeh

Vaše intuice o funkcích — kompozice, znovupoužití, izolace — se najednou přímo aplikovala na vývoj UI. To bylo radikální ve srovnání s imperativní manipulací DOM.

JSX: Nejnenáviděnější vlastnost, která se stala superschopností

React potřeboval způsob, jak popisovat UI uvnitř komponent. Logickou odpovědí bylo HTML — ale HTML nemohlo existovat přímo v JavaScriptu... dokud React nevynalezl JSX.

JSX spojil:

  • Expresivitu JavaScriptu
  • Čitelnost HTML
Vývojáři to zpočátku nesnášeli

"HTML v JavaScriptu? To porušuje oddělení zájmů!"

Ale React měl jinou interpretaci:

Oddělení zájmů je o konceptuálních hranicích, ne o příponách souborů. Ve světě Reactu vše, co souvisí s vykreslováním komponenty — její stav, UI a dokonce i styly — patří k sobě.

Jakmile vývojáři začali stavět skutečné aplikace s JSX, rychle si uvědomili jeho sílu.

React dnes: UI primitiv pro moderní frameworky

Od roku 2014 do 2020 byl React především používán pro jednostránkové aplikace s React Routerem. Ale moderní vývoj se vyvinul.

Dnes je React považován za UI primitiv uvnitř větších metaframeworků jako:

Next.js
Remix
Astro

Tyto frameworky přidávají funkce jako server-side rendering, routování, streaming a bundling — zatímco React zůstává zaměřený na to, co dělá nejlépe:

Budování UI pomocí komponent

Nezměněná filozofie

Filozoficky se React moc nezměnil. Jeho základy jsou stejné: Stav → UI, Komponenty → kompozice, Deklarativní nad imperativním. Ale způsoby, jakými React používáme, se staly silnějšími.

Shrnutí

React uspěl, protože se odvážil zpochybnit status quo:

Klíčové poznatky
  • Nahradil mutace čistými funkcemi
  • Sjednotil UI a logiku uvnitř komponent
  • Spojil HTML a JavaScript pomocí JSX
  • Poskytl předvídatelný mentální model
  • Umožnil nový ekosystém kompozitního UI

Co začalo jako kontroverzní, neoblíbená knihovna, se vyvinulo v páteř moderního front-end vývoje. A ať už používáte React přímo nebo přes metaframework, jeho vliv je všude.