Ú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.
- •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:
Král DOM manipulace
Minimalismus a MVC
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
// 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
// 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:
<!-- 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:
- • 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:
// 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
"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:
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:
- 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.