React (webový framework)

React
Logo
VývojářMeta Platforms, Harshil Patel, Sebastian Markbåge, Dan Abramov, Rachel Nabors a Andrew Clark
První vydání2013
Aktuální verze19.0.0 (5. prosince 2024)
Operační systémmultiplatformní software
Vyvíjeno vJavaScript
Typ softwaruwebový aplikační framework, knihovna a javascriptová knihovna
Licencelicence MIT
Webreact.dev
Některá data mohou pocházet z datové položky.

React (také známý jako React.js nebo ReactJS) je knihovna jazyka JavaScriptová[1] pro tvorbu uživatelského rozhraní. Je vyvíjený Facebookem a komunitou samostatných vývojářů a společností.[2][3][4]

React se mimo jiné využívá při tvorbě single-page nebo mobilních aplikací.

Základní použití

Následná ukázka je triviální příklad použití Reactu s HTMLJavaScriptem:

<div id="myReactApp"></div>

<script type="text/babel">
  class Greeter extends React.Component { 
    render() { 
      return <h1>{this.props.greeting}</h1>
    } 
  } 

  ReactDOM.render(<Greeter greeting="Hello World!" />, document.getElementById('myReactApp'));
</script>

Třída Greeter je reactí komponenta, která přijímá propertu greeting. Metoda ReactDOM.render vytváří instanci komponenty Greeter, nastavuje propertu greeting na hodnotu 'Hello World' a vkládá renderovanou komponentu jako potomka DOM prvku s id myReactApp.

Tato ukázka se ve webovém prohlížeči zobrazí jako následující:

<div id="myReactApp">
  <h1>Hello World!</h1>
</div>

Historie

V roce 2011 se vývojáři na Facebooku začali potýkat s problémy s údržbou kódu. Vzhledem k tomu, že aplikace Facebook Ads má stále větší počet funkcí, potřeboval tým více lidí, aby fungovala bezchybně. Rostoucí počet členů týmu a funkcí aplikací je jako společnost zpomalil. Postupem času se jejich aplikace stávala obtížně ovladatelnou, protože čelili spoustě kaskádových aktualizací.[5]

React byl nasazen na Facebook News Feed v roce 2011 a později na Instagram v roce 2012. V roce 2013 nastal čas, aby se React stal otevřeným zdrojem, a během JS ConfUS, který se konal od 29. do 31. května, představil Jordan Walke React světu.[6] Byl ovlivněn XHP, knihovnou komponent HTML pro PHP. React v0.13 byl vydán v březnu 2015. Tato verze Reactu měla uvítanou novou funkci, kterou byla podpora tříd ES6. Ve stejném měsíci vydání React v0.13 byl světu představen React Native.

Instalace a Spuštění React aplikace

K vytvoření React webové je potřeba Node.js a NPM. Samotné vytvoření se provede příkazem:

$ npm install create-react-app
$ create-react-app <project-name>

Alternativou může být příkaz npx create-react-app <project-name> který provede vytvoření celého projektu a konfiguraci s tím spojenou. Npx je nástroj pro běh balíčků, který je dodáván s npm 5.2+. [7]

Pro spuštění stačí uvnitř složky s projektem opět zadat příkaz npm start . Příkaz npm start spustí aplikaci v rámci lokálního serveru standardně na adrese http://localhost:3000/ a otevře je ve výchozím prohlížeči.

Komponenta

Při navrhování React aplikací začínáme tím, že si musíme aplikaci rozkouskovat do jednotlivých komponent. V Reactu je možné vytvořit komponentu pomocí třídy anebo pomocí funkcí. Jde o předpřipravené prvky jako je například text, tlačítko nebo textové pole, které univerzálně fungují na všech podporovaných platformách. Kromě těchto základních komponentů lze definovat vlastní komponenty, nebo importovat komponenty tvořené komunitou.

Nejjednodušší způsob, jak definovat komponentu, je napsat funkci JavaScriptu:

function Welcome(props){
    return <h1>Hello, {props.name}</h1>;
}

K definování komponenty lze také použít třídu ES6:

class Welcome extends React.Component {
    render() {
        return <h1>Hello, {this.props.name}</h1>
    }
}

Komponenty mohou v sobě obsahovat další komponenty. Z menších komponent můžeme poskládat složitější komponenty. Například můžeme vytvořit komponentu App, ve která se další komponenta Welcome vykreslí několikrát:

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

function App() {
  return (
    <div>
      <Welcome name="Sara" />
      <Welcome name="Cahal" />
      <Welcome name="Edite" />
    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

JSX

JSX neboli JavaScript XML je rozšíření syntaxe jazyka JavaScript. Podobný vzhled jako HTML, JSX poskytuje způsob, jak strukturovat vykreslování komponent pomocí syntaxe známé mnoha vývojářům. Komponenty React jsou obvykle psány pomocí JSX, i když nemusí být (komponenty mohou být také psány v čistém JavaScriptu).

Příklad kódu JSX:

class App extends React.Component {
  render() {
    return (
      <div>
        <p>Header</p>
        <p>Content</p>
        <p>Footer</p>
      </div>
    );
  }
}

Stavy

Komponenty využívají states neboli stavy pro data měnící se v průběhu času. Konkrétně by tedy měly být stavy využity pouze v případě, kdy aplikace přijme vstup od uživatele, nebo se obsah mění na základě časovače. Při práci se stavy je běžnou praktikou vytvoření několika bezstavových komponentů, které pouze vykreslují data a mají nad sebou jeden komponent, který stavů využívá a posílá tyto stavy svým potomkům pomocí props. Tento stavový komponent zapouzdřuje veškerou interakční logiku, zatímco se ty bez stavové starají o renderování dat deklarativní cestou.[8]

Prvním krokem k použití stavů je incializace. Ta by měla být provedena v konstruktoru komponentu. Kvůli jednoduchosti je doporučeno používat jako hodnotu stavů booleanovské hodnoty.

class Container extends Component {
    constructor() {
        super();
        this.state = {viditelny: true};
    }
}

Stavy mají k dispozici několik funkcí a proměnných umožňujících jednoduchou manipulaci. Funkci this.setState({ klic: hodnota }) sloužící ke změně stavu, proměnnou this.state.klic sloužící k získání aktuálního stavu a proměnnou prevState.klic k získání předchozího stavu. Proměnná this.state.klic obsahuje aktuální hodnotu stavu a slouží pro předání stavu k dalším operacím, jako je například uložení tohoto stavu do props komponenty.

Zpracování událostí

Zpracování událostí pomocí React elementů je velmi podobné zpracování událostí u prvků DOM. Existuje několik rozdílů v syntaxi: [9]

  • React události jsou pojmenovány pomocí camelCase, spíše než malá písmena
  • S JSX předáte funkci jako obslužnou rutinu události (event handler), nikoli jako řetězec.

Například HTML:

<button onclick="activateLasers()">
    Activate Lasers
</button>

je mírně odlišný v React:

<button onClick={activateLasers}>
    Activate Lasers
</button>

Podmíněné renderování

V React lze vytvořit odlišné komponenty, které zapouzdřují chování. Podmíněné vykreslování v React funguje stejně jako podmínky v JavaScriptu. Příkazy if – else nelze použít uvnitř JSX, ale místo toho lze použít podmíněné výrazy.

class App extends React.Component {
    render() {
        const i = 1;
        return (
            <div>
                <h1>{ i === 1 ? 'true' : 'false' }</h1>ky
            </div>
        )
    }
}

Ternární operátor je vhodný pro jednoduché podmínky. Pokud by se podmínky více větvily, je lepší zvolit if/else.

function App(props) {
  const podminka = props.hodnotaProps;
  if (podminka) {
    return (
       <div>
         <h1>pravda</h1>
       </div>
     );
  }
  return (
       <div>
         <h1>nepravda</h1>
       </div>
     );
}
ReactDOM.render(
  <App hodnotaProps={true} />,
  document.getElementById('root')
);

Tento příklad vykresluje pravda nebo nepravda v závislosti na hodnotě hodnotaProps props.

React Hooks

Cílem Hooks („háčků“) je zjednodušit tvorbu React aplikací. Umožňují použít state a lifecycle metody ve funkcionálních komponentách. Nahrazují HOC (higher order components) a téměř ve většině případech také render props. React komponenty nejsou nejvhodnější na sdílení kódu, protože jejich hlavním úkolem je vykreslovat UI (uživatelská rozhraní). React Hooks dovolují lepší sdílení kódu napříč aplikací.[10]

Díky useState můžeme používat stav i v rámci funkcionálních komponent. Hook useState očekává parametr, který se stane iniciální hodnotou stavu, která je nastavená pouze poprvé, když je komponenta vytvořena. Hook nám vrátí dvojici, kterou získáme pomocí destrukturalizace. První je aktuální hodnota stavu. Druhá je funkce, kterou můžeme zavolat a předat ji nějakou hodnotu, která se stane novým stavem.[11]

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

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

Tento příklad vykresluje počítadlo. Když kliknete na tlačítko, zvýší se hodnota o jedničku. Jediným argumentem useState je počáteční stav; ve výše uvedeném příkladu je to 0, počítadlo začne na nule.

Reference

V tomto článku byl použit překlad textu z článku React (web framework) na anglické Wikipedii.

  1. React – A JavaScript library for building user interfaces [online]. React [cit. 2019-10-04]. Dostupné online. (anglicky) 
  2. KRILL, Paul. React: Making faster, smoother UIs for data-driven Web apps. InfoWorld [online]. 2014-05-15 [cit. 2019-10-04]. Dostupné online. (anglicky) 
  3. HEMEL, Zef. Facebook's React JavaScript User Interfaces Library Receives Mixed Reviews. InfoQ [online]. 2013-06-03 [cit. 2019-10-04]. Dostupné online. (anglicky) 
  4. DAWSON, Chris. JavaScript's History and How it Led To ReactJS. The New Stack [online]. 2014-07-25 [cit. 2019-10-04]. Dostupné online. (anglicky) 
  5. The History of React.js on a Timeline | @RisingStack. RisingStack Engineering - Node.js Tutorials & Resources [online]. 2018-04-04 [cit. 2021-01-08]. Dostupné online. (anglicky) 
  6. The Evolution Of React. Dashbouquet [online]. [cit. 2021-01-08]. Dostupné online. (anglicky) 
  7. MARCHÁN, Kat. Introducing npx: an npm package runner. Medium [online]. 2017-08-10 [cit. 2021-01-08]. Dostupné online. (anglicky) 
  8. SHKUT, Konstantin. Rational App Development [online]. 2016-10-18 [cit. 2021-01-08]. Dostupné online. (anglicky) 
  9. Handling Events – React. reactjs.org [online]. [cit. 2021-01-08]. Dostupné online. (anglicky) 
  10. UHLÍŘ, Miroslav. Úvod do React Hooks. Medium [online]. 2019-04-18 [cit. 2021-01-08]. Dostupné online. (anglicky) 
  11. KŘÍŽ, Pavel. Zdroják [online]. 2019-11-11 [cit. 2021-01-08]. Dostupné online. 

Externí odkazy

Read other articles:

Felice Evacuo Evacuo (a sinistra) nel 2013 Nazionalità  Italia Altezza 187 cm Peso 84 kg Calcio Ruolo Attaccante Termine carriera 2022 Carriera Giovanili 1998-2000 Turris Squadre di club1 2000-2001 Turris11 (1)[1]2001-2002 Lazio2 (0)2002-2003→  Florentia Viola20 (2)2003-2004→  Viterbese21 (5)[2]2004-2005 Avellino33 (8)[3]2005-2006→  Torres33 (16)[4]2006-2007 Avellino31 (15)[5]2007-2008 Frosinone4...

 

University campus in Kelowna, Canada University of British Columbia OkanaganTypePublicEstablished2005; 19 years ago (2005)PresidentBenoit-Antoine BaconProvostRehan SadiqPrincipalLesley CormackUndergraduates10,610[1]Postgraduates1,368[1]Address3333 University Way, Kelowna, British Columbia, V1V 1V7, CanadaColours   Blue & gold[2]NicknameHeatWebsiteok.ubc.ca The University of British Columbia Okanagan (also known as UBC Okanagan or UBCO) i...

 

phpGroupWare Informations Développé par 7 contributeurs Dernière version 0.9.16.017 (7 juillet 2010) Dépôt svn.savannah.nongnu.org/svn/phpgroupware État du projet Abandonné Environnement Multiplate-forme Langues Multilingue Type Outil de gestion de projet Licence GNU GPL Site web www.manvswebapp.com/phpgroupware et savannah.nongnu.org/projects/phpgroupware modifier - modifier le code - voir Wikidata (aide) phpGroupWare est un collecticiel libre développé dans le cadre du projet GNU ...

Policy advocating welfare benefits just for certain groups Part of a series onNationalism Nation forming Nationalism in the Middle Ages Anthem Church Colours Emblem Father Flag Epic God Identity Language Myth Sport State Symbol Treasure Core values Allegiance Independence Patriotism Self-determination Solidarity Types African Anarchist Blind Bourgeois Business Welfare Civic American French Irish Communist Constitutional patriotism Corporate Cyber- Ecological Economic Ethnic Ethnopluralism Eur...

 

Map all coordinates using OpenStreetMap Download coordinates as: KML GPX (all coordinates) GPX (primary coordinates) GPX (secondary coordinates) Suburb of Brisbane, Queensland, AustraliaBellbowrieBrisbane, QueenslandCheck Point at the intersection of Moggill and Birkin Roads in Bellbowrie, 2011BellbowrieCoordinates27°33′32″S 152°52′57″E / 27.5589°S 152.8824°E / -27.5589; 152.8824 (Bellbowrie (centre of suburb))Population5,462 (2016 census...

 

History of the feminist movement in Greece This article needs attention from an expert in Gender studies. See the talk page for details. WikiProject Gender studies may be able to help recruit an expert. (February 2017) Part of a series onWomen in society Society Women's history (legal rights) Woman Animal advocacy Business Female entrepreneurs Gender representation on corporate boards of directors Diversity (politics) Diversity, equity, and inclusion Economic development Explorers and tr...

American video game developer This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Human Head Studios – news · newspapers · books · scholar · JSTOR (April 2015) (Learn how and when to remove this message) Human Head Studios, Inc.Company typePrivateIndustryVideo gamesFoundedOctober 1997; 26 years...

 

1956 UCI Track Cycling World ChampionshipsVenueCopenhagen, Denmark Date(s)27 Augustus - 2 September 1956VelodromeOrdrupbanenEvents5← Milan 1955Rocourt 1957 → The 1956 UCI Track Cycling World Championships were the World Championship for track cycling. They took place in Copenhagen, Denmark from 27 August to 2 September 1956.[1] Five events for men were contested, 3 for professionals and 2 for amateurs. Medal summary Event Gold Silver Bronze Men's Professional Ev...

 

Church in Escaldes-Engordany, Andorra This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: Església de Sant Pere Màrtir, Escaldes-Engordany – news · newspapers · books · scholar · JSTOR (September 2022) Església de Sant Pere Màrtir, Escaldes-Engordany Església de Sant Pere Màrtir, Escaldes-Engorda...

Pour les articles homonymes, voir RAF et Stade ruthénois. Pour la section féminine, voir Rodez Aveyron Football (féminines). Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (juillet 2022). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilit...

 

Russian figure skater Arina MartynovaMartynova in 2007.Full nameArina Valeryevna MartynovaBorn (1990-02-27) 27 February 1990 (age 34)Moscow, Russian SFSR, Soviet UnionHeight1.65 m (5 ft 5 in)Figure skating careerCountry RussiaSkating clubSC MoskvitchBegan skating1994Retired2009 Arina Valeryevna Martynova (Russian: Арина Валерьевна Мартынова, born 27 February 1990 in Moscow) is a Russian figure skater. She is the 2006 Nebelhorn Trophy silver med...

 

The exploration of North America by European sailors and geographers was an effort by major European powers to map and explore the continent with the goal of economic, religious and military expansion. The combative and rapid nature of this exploration is the result of a series of countering actions by neighboring European nations to ensure no single country had garnered enough wealth and power from the Americas to militarily tip the scales over on the European continent. It spanned the late...

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (ديسمبر 2018) بطولة إفريقيا لألعاب القوى 1993معلومات عامةالرياضة ألعاب القوى البلد جنوب إفريقيا المكان ملعب حديقة المل...

 

Extinct genus of carnivores ImagotariaTemporal range: Late Miocene PreꞒ Ꞓ O S D C P T J K Pg N Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Mammalia Order: Carnivora Clade: Pinnipedia Family: Odobenidae Genus: †Imagotaria Species: †I. downsi Binomial name †Imagotaria downsiMitchell, 1968 Imagotaria is an extinct monotypic genus of walrus with the sole species Imagotaria downsi. Fossils of Imagotaria are known from the early late ...

 

Kontributor utama artikel ini tampaknya memiliki hubungan dekat dengan subjek. Artikel ini mungkin perlu dirapikan agar mematuhi kebijakan konten Wikipedia, terutama dalam hal sudut pandang netral. Silakan dibahas lebih lanjut di halaman pembicaraan artikel ini. (November 2019) (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Bertelsmann SE & Co. KGaAKantor pusat Bertelsmann di GüterslohJenisSwastaIndustriMedia massaDidirikan1 Juli 1835; 189 tahun lalu (1835-07-01...

この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: アフリカ U-17選手権2007 – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL (2015年4月) アフリカ U-17選手権2007は、2007年3月10...

 

Conformal map projection Peirce quincuncial projection of the world. The red equator is a square whose corners are the only four points on the map at which the projection fails to be conformal. The Peirce quincuncial projection with Tissot's indicatrix of deformation. The Peirce quincuncial projection is the conformal map projection from the sphere to an unfolded square dihedron, developed by Charles Sanders Peirce in 1879.[1] Each octant projects onto an isosceles right triangle, and...

 

German novelist (1816–1894) Otto MüllerBorn(1816-06-01)June 1, 1816Schotten, Hesse-DarmstadtDiedAugust 6, 1894(1894-08-06) (aged 78)Stuttgart, Baden-Württemberg, GermanyOccupationNovelistNationalityGerman Otto Müller (June 1, 1816 – August 6, 1894[1]) was a German novelist. Biography Müller was born at Schotten, Hesse-Darmstadt. He began his career as a librarian at the court library at Darmstadt and edited newspapers at Frankfurt and Mannheim. In 1854 he established the ...

Michal KolářMichael Kolář lors du départ du Grand Prix d'Isbergues 2015.InformationsNom dans la langue maternelle Michael KolářNaissance 21 décembre 1992 (31 ans)PragueNationalité slovaqueÉquipes amateurs 2011Inter-SC2012-2013Dukla Trenčín TrekÉquipes professionnelles 2014-2015Tinkoff-Saxo2016Tinkoff01.2017-06.2018Bora-Hansgrohemodifier - modifier le code - modifier Wikidata Michal Kolář, né le 21 décembre 1992, est un coureur cycliste slovaque, professionnel de 2014 à ...

 

Water supply and sanitation in EthiopiaDataWater coverage (broad definition)38% (2008)[1] or 68.5% (2010),[2] depending on source and definitionSanitation coverage (broad definition)12% (2008)[1] or 56% (2010),[3] depending on source and definitionContinuity of supplyMostly intermittentAverage urban water use (L/person/day)30–60 (2006)[4]Average urban water and sanitation tariff (US$/m3)n/aShare of household meteringLowAnnual investment in WSSUS$1/ca...