Reagovat (webový rámec) - React (web framework) - Wikipedia
Původní autoři | Jordan Walke |
---|---|
Vývojáři | Facebook a komunita |
První vydání | 29. května 2013[1] |
Stabilní uvolnění | 17.0.0[2] / 20. října 2020 |
Úložiště | |
Napsáno | JavaScript |
Plošina | Webová platforma |
Typ | Knihovna JavaScript |
Licence | Licence MIT |
webová stránka | reagovat |
Reagovat (také známý jako React.js nebo ReactJS) je open-source, přední část, Knihovna JavaScript[3] pro stavbu uživatelská rozhraní nebo komponenty uživatelského rozhraní. Udržuje ji Facebook a komunita jednotlivých vývojářů a společností.[4][5][6]React lze použít jako základ při vývoji jednostránkový nebo mobilní aplikace. React se však týká pouze vykreslování dat do DOM, a proto vytváření aplikací React obvykle vyžaduje použití dalších knihoven pro řízení státu a směrování.[7][8] Redux[9] a React Router[10] jsou příslušné příklady takových knihoven.
Základní použití
Následuje základní příklad použití React v HTML s JSX a JavaScript.
1<div id=„myReactApp“></div>23<skript typ=„text / babel“>4 funkce Greeter(rekvizity) {5 vrátit se <h1>{rekvizity.Pozdrav}</ h1>6 }7 var Aplikace = <Greeter Pozdrav="Ahoj světe!" />;8 ReactDOM.poskytnout(Aplikace, dokument.getElementById('myReactApp'));9</skript>
The Greeter
function je komponenta React, která přijímá vlastnost Pozdrav
. Proměnná Aplikace
je instancí Greeter
součást, kde Pozdrav
vlastnost je nastavena na 'Ahoj světe!'
. The ReactDOM.render
metoda poté vykreslí naši Greeterovou komponentu uvnitř DOM prvek s id myReactApp
.
Při zobrazení ve webovém prohlížeči bude výsledek
<div id=„myReactApp“> <h1>Ahoj světe!</h1></div>
Pozoruhodné funkce
Součásti
Kód reakce je vytvořen z entit nazývaných komponenty. Komponenty lze vykreslit na konkrétní prvek v souboru DOM pomocí knihovny React DOM. Při vykreslování komponenty lze předat hodnoty známé jako „rekvizity“[11]:
ReactDOM.poskytnout(<Greeter Pozdrav="Ahoj světe!" />, dokument.getElementById('myReactApp'));
Dva primární způsoby deklarace komponent v Reactu jsou funkční komponenty a komponenty založené na třídě.
Funkční součásti
Funkční komponenty jsou deklarovány pomocí funkce, která poté vrací nějaký JSX.
konst Pozdrav = (rekvizity) => <div>Ahoj, {rekvizity.název}!</ div>;
Komponenty založené na třídě
Komponenty založené na třídě jsou deklarovány pomocí ES6 třídy.
třída ParentComponent rozšiřuje Reagovat.Součástka { Stát = { barva: 'zelený' }; poskytnout() { vrátit se ( <ChildComponent barva={tento.Stát.barva} /> ); }}
Virtuální DOM
Další pozoruhodnou vlastností je použití virtuálního Model objektu dokumentu nebo virtuální DOM. Reagovat vytvoří v paměti mezipaměť datové struktury, vypočítá výsledné rozdíly a poté efektivně aktualizuje zobrazený DOM v prohlížeči.[12]. Tento proces se nazývá smíření. To umožňuje programátorovi psát kód, jako by se při každé změně vykreslila celá stránka, zatímco knihovny React vykreslují pouze dílčí součásti, které se ve skutečnosti mění. Toto selektivní vykreslování poskytuje výrazné zvýšení výkonu. Šetří námahu při přepočtu stylu CSS, rozložení stránky a vykreslení pro celou stránku.
Metody životního cyklu
Metody životního cyklu používají formu hákování který umožňuje provádění kódu v nastavených bodech během životnosti komponenty.
shouldComponentUpdate
umožňuje vývojáři zabránit zbytečnému opětovnému vykreslení komponenty vrácením false, pokud se vykreslení nevyžaduje.componentDidMount
je volána, jakmile je komponenta „připojena“ (komponenta byla vytvořena v uživatelském rozhraní, často spojením s DOM uzel). To se běžně používá ke spuštění načítání dat ze vzdáleného zdroje prostřednictvím API.componentWillUnmount
je volána bezprostředně před zbořením komponenty nebo „odpojením“. To se běžně používá k vymazání závislostí zdrojů náročných na komponentu, které se jednoduše neodstraní při odpojení komponenty (např. Odebrání jakékolisetInterval ()
instance, které souvisejí s komponentou, nebo „posluchač událostí „nastaveno na„ dokumentu “kvůli přítomnosti komponenty)poskytnout
je nejdůležitější metoda životního cyklu a jediná požadovaná v jakékoli komponentě. Obvykle se volá pokaždé, když se aktualizuje stav komponenty, což by se mělo projevit v uživatelském rozhraní.
JSX
JSX nebo JavaScript XML, je rozšíření syntaxe jazyka JavaScript.[13] Podobný vzhled jako HTML poskytuje JSX 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). JSX je podobný jiné syntaxi rozšíření vytvořené společností Facebook pro PHP volala XHP.
Příklad kódu JSX:
1třída Aplikace rozšiřuje Reagovat.Součástka { 2 poskytnout() { 3 vrátit se ( 4 <div> 5 <str>Záhlaví</ p> 6 <str>Obsah</ p> 7 <str>Zápatí</ p> 8 </ div> 9 );10 }11}
- Vnořené prvky
Více prvků na stejné úrovni musí být zabaleno do jednoho prvku React, jako je například <div>
prvek zobrazený výše, fragment vymezený <Fragment>
nebo ve zkratkové formě <>
, nebo se vrátil jako pole.[14][15]
- Atributy
JSX poskytuje řadu atributů prvků určených k zrcadlení těch, které poskytuje HTML. Vlastní atributy lze také předat komponentě.[16] Všechny atributy obdrží komponenta jako rekvizity.
- Výrazy JavaScriptu
JavaScript výrazy (ale ne prohlášení ) lze použít uvnitř JSX se složenými závorkami {}
:
<h1>{10+1}</ h1>
Výše uvedený příklad se vykreslí
<h1>11</h1>
- Podmíněná prohlášení
Příkazy if – else nelze použít uvnitř JSX, ale místo toho lze použít podmíněné výrazy. Níže uvedený příklad se vykreslí {i === 1? 'true': 'false'}
jako řetězec 'skutečný'
protože i
se rovná 1.
1třída Aplikace rozšiřuje Reagovat.Součástka { 2 poskytnout() { 3 konst i = 1; 4 vrátit se ( 5 <div> 6 <h1>{ i === 1 ? 'skutečný' : 'Nepravdivé' }</ h1> 7 </ div> 8 ); 9 }10}
Výše uvedené vykreslí:
<div> <h1>skutečný</h1></div>
Funkce a JSX lze použít v podmíněných podmínkách:
1třída Aplikace rozšiřuje Reagovat.Součástka { 2 poskytnout() { 3 konst sekce = [1, 2, 3]; 4 vrátit se ( 5 <div> 6 {sekce.délka > 0 && sekce.mapa(n => ( 7 / * 'klávesa' se používá při reakci ke sledování položek seznamu a jejich změn * / 8 / * Každý 'klíč' musí být jedinečný * / 9 <div klíč={"sekce-" + n}>Sekce {n}</ div>10 ))}11 </ div>12 );13 }14}
Výše uvedené vykreslí:
<div> <div>Sekce 1</div> <div>Sekce 2</div> <div>Část 3</div></div>
Kód napsaný v JSX vyžaduje převod pomocí nástroje, jako je Babel než tomu budou webové prohlížeče rozumět.[17] Toto zpracování se obvykle provádí během a tvorba softwaru proces před aplikací nasazen.
Architektura nad rámec HTML
Základní architektura Reactu platí i mimo vykreslování HTML v prohlížeči. Například Facebook má dynamické grafy, které se vykreslují do <canvas>
značky,[18] a Netflix a PayPal použijte univerzální načítání k vykreslení identického HTML na serveru i v klientovi.[19][20]
Reagovat háčky
Háčky jsou funkce, které vývojářům umožňují „zapojit se“ do funkcí Reagovat na stav a životní cyklus z komponent funkcí.[21] Háčky nefungují uvnitř tříd - umožňují vám používat React bez tříd.[22]
React poskytuje několik vestavěných háků jako useState
,[23] useContext
, useReducer
a useEffect
[24]. Ostatní jsou zdokumentovány v příručce Hooks API Reference.[25] useState
a useEffect
, které jsou nejpoužívanější, slouží ke kontrole stavu a vedlejších účinků.
Pravidla háčků
Existují pravidla háčků[26] které popisují charakteristický vzor kódu, na který se háčky spoléhají.
- Háčky by měly být volány pouze na nejvyšší úrovni (ne uvnitř smyček nebo příkazů if).
- Háčky by měly být volány pouze z komponent React Function, nikoli z běžných funkcí nebo komponent třídy
Ačkoli tato pravidla nelze za běhu vynutit, lze nástroje pro analýzu kódu, jako jsou linters, nakonfigurovat tak, aby během vývoje detekovaly mnoho chyb. Pravidla platí jak pro použití háků, tak pro implementaci vlastních háků[27], které mohou volat jiné háčky.
Společné idiomy
React se nepokouší poskytnout kompletní „knihovnu aplikací“. Je navržen speciálně pro vytváření uživatelských rozhraní[3] a proto nezahrnuje mnoho nástrojů, které někteří vývojáři mohou považovat za nutné k vytvoření aplikace. To umožňuje volbu libovolných knihoven, které vývojář dává přednost provádění úkolů, jako je provádění přístupu k síti nebo místní úložiště dat. Jak knihovna dozrává, objevily se běžné vzorce používání.
Využití architektury Flux
Podporovat Reactův koncept jednosměrného toku dat (s kterým by se dalo kontrastovat AngularJS (obousměrný tok), architektura Flux představuje alternativu k populární řadič pohledu modelu architektura. Flux funkce akce které jsou zasílány přes ústřednu odesílatel do a obchoda změny v obchodu se přenesou zpět do zobrazení.[28] Při použití s Reactem se toto šíření provádí prostřednictvím vlastností komponent.
Flux lze považovat za variantu vzor pozorovatele.[29]
Komponenta React pod architekturou Flux by neměla přímo upravovat žádné rekvizity, které jí byly předány, ale měla by být předána funkcím zpětného volání, které vytvářejí akce které jsou odeslány dispečerem k úpravě úložiště. Akce je objekt, jehož odpovědností je popsat, k čemu došlo: například akce popisující jednoho uživatele „sledujícího“ jiného může obsahovat ID uživatele, ID cílového uživatele a typ USER_FOLLOWED_ANOTHER_USER
.[30] Obchody, které lze považovat za modely, se mohou měnit v reakci na akce přijaté od dispečera.
Tento vzorec je někdy vyjádřen jako „vlastnosti plynou dolů, akce plynou nahoru“. Od svého vzniku bylo vytvořeno mnoho implementací Fluxu, možná nejznámější bytosti Redux, který představuje jediný obchod, často nazývaný a jediný zdroj pravdy.[31]
Budoucí vývoj
Stav projektu lze sledovat prostřednictvím diskusního fóra základního týmu.[32] Hlavní změny Reagovat však procházejí problémy úložiště Future of React a vytáhnout žádosti.[33][34] To umožňuje komunitě React poskytovat zpětnou vazbu o nových potenciálních funkcích, experimentálních API a vylepšení syntaxe JavaScriptu.
Dějiny
React vytvořil Jordan Walke, softwarový inženýr společnosti Facebook, který vydal raný prototyp React s názvem „FaxJS“.[35][36] Byl ovlivněn XHP, an HTML knihovna komponent pro PHP. Poprvé byl nasazen na Facebooku Novinky v roce 2011 a později Instagram v roce 2012.[37] Byla otevřena v JSConf USA v květnu 2013.[36]
Reagovat nativní, což umožňuje nativní Android, iOS, a UWP vývoj s React, byl oznámen na Facebooku React Conf v únoru 2015 a open-source v březnu 2015.
18. dubna 2017 oznámil Facebook Reagovat Fiber, nový základní algoritmus knihovny React pro vytváření uživatelská rozhraní.[38] React Fiber se měl stát základem budoucích vylepšení a vývoje funkcí knihovny React.[39][potřebuje aktualizaci ]
26. září 2017 byla pro veřejnost uvedena React 16.0.[40]
16. února 2019 byla pro veřejnost uvedena React 16.8.[41] Vydání představilo React Hooks.[42]
10. srpna 2020 tým React oznámil prvního kandidáta na vydání pro React v17.0, který je pozoruhodný jako první hlavní vydání bez větších změn v rozhraní API pro vývojáře React.[43]
Verze | Datum vydání | Změny | |
---|---|---|---|
0.3.0 | 29. května 2013 | První veřejné vydání | |
0.4.0 | 20. července 2013 | Podpora uzlů komentářů {/ * * /} , vylepšená rozhraní API pro vykreslování na straně serveru, odstraněna React.autoBind, podpora klíčové rekvizity, vylepšení formulářů, opravené chyby. | |
0.5.0 | 20. října 2013 | Vylepšit využití paměti, Podpora pro události výběru a složení, Podpora pro getInitialState a getDefaultProps v mixinech, Přidáno React.version a React.isValidClass, Vylepšená kompatibilita pro Windows. | |
0.8.0 | 20. prosince 2013 | Přidaná podpora pro řádky a sloupce, odložení a asynchronizace, smyčka pro atributy | |
0.9.0 | 20. února 2014 | Přidaná podpora pro crossOrigin, stahování a hrefLang, mediaGroup a ztlumení, sandbox, bezproblémové a srcDoc, atributy oboru, přidána libovolná, arrayOf, komponenta, oneOfType, renderovatelná, tvar do React.PropTypes, přidaná podpora pro události onMouseOver a onMouseOut, přidaná podpora pro onLoad a onError na elementech. | |
0.10.0 | 21. března 2014 | Přidaná podpora pro atributy srcSet a textAnchor, přidat funkci aktualizace pro neměnná data, zajistit, aby všechny neplatné prvky nevkládaly uzavírací značku. | |
0.11.0 | 17. července 2014 | Vylepšená podpora SVG, Normalizovaná událost e.view, Příkaz Update $ apply, Přidaná podpora pro jmenné prostory, Přidáno nové API transformWithDetails, obsahuje předem připravené balíčky pod dist /, MyComponent () nyní vrací deskriptor, nikoli instanci. | |
0.12.0 | 21. listopadu 2014 | Přidány nové funkce Operátor Spread ({...}) zavedený k zastarání tohoto. TransferPropsTo, přidaná podpora pro acceptCharset, classID, manifest HTML atributy, React.addons.batchedUpdates přidané do API, @jsx React.DOM již není vyžadován, opravené problémy s přechody CSS. | |
0.13.0 | 10. března 2015 | Zastaralé vzory, které varovaly v 0,12, již nefungují, pořadí rozlišení ref se změnilo, odstraněné vlastnosti this._pendingState a this._rootNodeID, podpora tříd ES6, přidání API React.findDOMNode (komponenta), podpora iterátorů a neměnných sekvencí js, přidáno nové funkce React.addons.createFragment, zastaralá sada React.addons.classSet. | |
0.14.1 | 29. října 2015 | Přidaná podpora pro srcLang, výchozí, atributy druhu a atribut barvy, zajištěný starší přístup .props na uzlech DOM, opravená scryRenderedDOMComponentsWithClass, přidána reagovat-dom.js. | |
15.0.0 | 7. dubna 2016 | Počáteční vykreslení nyní místo generování HTML používá document.createElement, Žádné další , Vylepšená podpora SVG, ReactPerf.getLastMeasurements () je neprůhledný, Nové zastarávání zavedeny s varováním, Opraveno několik malých úniků paměti, React DOM nyní podporuje citovat a profilovat atributy HTML a vlastnosti CSS cssFloat, gridRow a gridColumn. | |
15.1.0 | 20. května 2016 | Oprava chyby při dávkování, Zajištění použití nejnovějšího přiřazení objektu, Oprava regrese, Odebrat použití nástroje pro sloučení, Přejmenování některých modulů. | |
15.2.0 | 1. července 2016 | Zahrnout informace o zásobníku komponent, Zastavit ověřování rekvizit v době připojení, Přidat React.PropTypes.symbol, Přidat manipulaci onLoad do a manipulaci onError do | |
15.3.0 | 30. července 2016 | Přidat React.PureComponent, Opravit problém s vykreslením vnořeného serveru, Přidat xmlns, xmlnsXlink na podporu atributů SVG a referrerPolicy na atributy HTML, aktualizace Doplněk React Perf, Opravený problém s ref. | |
15.3.1 | 19. srpna 2016 | Zlepšit výkon vývojových sestavení, Vyčistit interní háčky, Upgradovat fbjs, Zlepšit dobu spuštění React, Opravit únik paměti ve vykreslování serveru, opravit React Test Renderer, Změnit invariant trackedTouchCount na konzolu. Chyba. | |
15.4.0 | 16. listopadu 2016 | Balíček React a sestavení prohlížeče již neobsahují React DOM, Vylepšený výkon vývoje, Opravené občasné chyby testů, aktualizaci batchedUpdates API, React Perf a ReactTestRenderer.create (). | |
15.4.1 | 23. listopadu 2016 | Přiřazení proměnné restrukturalizace, opravené zpracování událostí, opravená kompatibilita sestavení prohlížeče s prostředími AMD. | |
15.4.2 | 6. ledna 2017 | Opravené problémy s sestavením, přidané chybějící závislosti balíků, vylepšené chybové zprávy. | |
15.5.0 | 7. dubna 2017 | Přidáno reagovat-dom / test-utils, Odebráno peerDependencies, Opraven problém s Closure Compiler, Přidáno varování o opuštění pro React.createClass a React.PropTypes, Opravená chyba Chrome. | |
15.5.4 | 11. dubna 2017 | Opravte kompatibilitu s enzymem vystavením batchedUpdates na mělkém vykreslovači, aktualizujte verzi typů prop, opravte balíček reag-addons-create-fragment tak, aby zahrnoval transformaci uvolněné envify. | |
15.6.0 | 13. června 2017 | Přidejte podporu proměnných CSS do atributů stylu a vlastností stylu mřížky, opravte podporu AMD pro doplňky v závislosti na reakci, odeberte zbytečnou závislost, přidejte varování o opuštění podpory pro tovární pomocníky React.createClass a React.DOM. | |
16.0.0 | 26. září 2017 | Vylepšené zpracování chyb se zavedením „hranic chyb“, React DOM umožňuje předávání nestandardních atributů, drobné změny chování setState, odebrání build-with-addons.js, přidání React.createClass jako create-react-class, React.PropTypes jako typy prop, React.DOM jako továrny reagující na domovy, změny chování metod plánování a životního cyklu. | |
16.1.0 | 9. listopadu 2017 | Ukončování verzí Bower, oprava náhodné další globální proměnné v sestaveních UMD, oprava vypalování onMouseEnter a onMouseLeave, oprava zástupného symbolu | |
16.3.0 | 29. března 2018 | Přidat nové oficiálně podporované kontextové API, Přidat nový balíček Zabránit nekonečné smyčce při pokusu o vykreslení portálů pomocí SSR, Opravit problém s tímto. Stav, Opravit problém IE / Edge. | |
16.3.1 | 3. dubna 2018 | Předpona soukromého rozhraní API, oprava regrese výkonu a chyb při zpracování chyb v režimu vývoje, přidání závislosti peerů, oprava falešně pozitivního varování v IE11 při použití fragmentu. | |
16.3.2 | 16. dubna 2018 | Opravte selhání IE, opravte štítky v měření časování uživatelů, přidejte sestavení UMD, vylepšete výkon rozhraní unstable_observedBits API pomocí vnoření. | |
16.4.0 | 24. května 2018 | Přidat podporu pro specifikaci Pointer Events, Přidat schopnost specifikovat propTypes, Opravit kontext čtení, Opravit podporu getDerivedStateFromProps (), Opravit selhání testuInstance.parent, Přidat komponentu React.unstable_Profiler pro měření výkonu, Změnit interní názvy událostí. | |
16.5.0 | 5. září 2018 | Přidejte podporu pro React DevTools Profiler, řešte chyby ve více okrajových případech elegantně, přidejte reakci-dom / profilování, přidejte událost onAuxClick pro prohlížeče, přidejte pole motionX a movementY k událostem myši, přidejte tangentialPressure a twist pole k události ukazatele. | |
16.6.0 | 23. října 2018 | Přidejte podporu pro contextType, Podporujte úrovně priority, pokračování a zabalená zpětná volání, Vylepšete záložní mechanismus, Opravte šedé překrytí v iOS Safari, Přidat React.lazy () pro součásti dělení kódu. | |
16.7.0 | 20. prosince 2018 | Opravit výkon React.lazy pro líně načtené komponenty, Vymazat pole při odpojení, aby nedocházelo k úniku paměti, Opravit chybu pomocí SSR, Opravit regresi výkonu. | |
16.8.0 | 06 února 2019 | Přidejte háčky, přidejte ReactTestRenderer.act () a ReactTestUtils.act () pro dávkové aktualizace, podporujte synchronní pakety předávané React.lazy (), vylepšete líné inicializační API Hook useReducer. | |
16.8.6 | 27. března 2019 | Opravte nesprávnou výpomoc v useReducer (), opravte varování iframe v Safari DevTools, varujte, pokud je contextType nastaven na Context.Consumer místo Context, varujte, pokud je contextType nastaven na neplatné hodnoty. | |
16.9.0 | 9. srpna 2019 | Přidejte | |
16.10.0 | 27. září 2019 | Opravte případ hrany, kdy se aktualizace háčku nepamatovala. Opravte heuristiku pro určení, kdy se má hydratovat, abychom během aktualizace nesprávně hydratovali. Vymazáním dalších optických polí během odpojování ušetříte paměť. Opravte chybu s požadovanými textovými poli ve Firefoxu. Preferujte Object.is místo vložené polyfill, pokud je k dispozici. Opravit chybu při míchání napětí a zpracování chyb. | |
16.10.1 | 28. září 2019 | Opravte regresi v aplikacích Next.js tím, že umožníte, aby se během hydratace potichu nesladil nesoulad během hydratace | |
16.10.2 | 3. října 2019 | Opravte regrese v reakci nativního webu obnovením pořadí argumentů v extraktorech pluginů událostí | |
16.11.0 | 22. října 2019 | Opravte obslužné rutiny mouseenter ze střelby dvakrát uvnitř vnořených kontejnerů React. Odeberte experimentální rozhraní API unstable_createRoot a unstable_createSyncRoot. (Ty jsou v experimentálním kanálu k dispozici jako createRoot a createSyncRoot.) | |
16.12.0 | 14. listopadu 2019 | React DOM - Fix pasivní efekty (useEffect ) není spuštěn v aplikaci pro více uživatelů.Reagovat je - opravit | |
16.13.0 | 26. února 2020 | Funkce přidané v režimu React Concurrent. Opravte regrese v hlavní knihovně React a React Dom. | |
16.13.1 | 19. března 2020 | Opravte chybu ve starém režimu Napětí. Vrátit varování pro aktualizace mezi složkami, ke kterým dochází v životních cyklech vykreslování třídy | |
16.14.0 | 14. října 2020 | Přidejte podporu pro novou transformaci JSX. | |
17.0.0 | 20. října 2020 | Možnost „Žádné nové funkce“ umožňuje postupné aktualizace reakcí ze starších verzí. Přidejte novou transformaci JSX, změny v delegování událostí | |
17.0.1 | 22. října 2020 | React DOM - Opravuje selhání v IE11 |
Licencování
První veřejné vydání React v květnu 2013 používalo Licence Apache 2.0. V říjnu 2014 ji React 0.12.0 nahradil Licence 3-klauzule BSD a přidal samostatný textový soubor PATENTY, který umožňuje použití jakýchkoli patentů Facebooku souvisejících se softwarem:[44]
Licence udělená níže bude automaticky a bez předchozího upozornění ukončena pro kohokoli, kdo podá jakýkoli nárok (včetně podání jakýchkoli soudních sporů, tvrzení nebo jiných opatření), vycházející z (a) přímého, nepřímého nebo příspěvkového porušení nebo podnětu k porušení jakéhokoli patentu: (i ) společností Facebook nebo kteroukoli z jejích dceřiných společností nebo přidružených společností, bez ohledu na to, zda takový nárok souvisí se softwarem, (ii) kteroukoli stranou, pokud takový nárok zcela nebo zčásti vyplývá z jakéhokoli softwaru, produktu nebo služby společnosti Facebook nebo kteréhokoli z jejích dceřiné společnosti nebo přidružené společnosti, bez ohledu na to, zda se takový nárok vztahuje k Softwaru či nikoli, nebo (iii) jakoukoli stranou týkající se Softwaru; nebo (b) že jakékoli právo na jakýkoli patentový nárok na Facebook je neplatné nebo nevymahatelné.
Tato nekonvenční klauzule způsobila určité kontroverze a debaty v komunitě uživatelů React, protože ji lze interpretovat tak, že umožňuje Facebooku odejmout licenci v mnoha scénářích, například pokud Facebook zažaluje držitele licence a vyzve jej k provedení „jiné akce“ zveřejněním akce na blogu nebo jinde. Mnoho vyjádřilo obavy, že by Facebook mohl nespravedlivě využít klauzuli o ukončení nebo že integrace React do produktu může komplikovat budoucí akvizici startupové společnosti.[45]
Na základě zpětné vazby komunity Facebook v dubnu 2015 aktualizoval udělení patentu, aby byl méně nejednoznačný a tolerantnější:[46]
Licence udělená níže bude automaticky a bez předchozího upozornění ukončena, pokud vy (nebo kterákoli z vašich dceřiných společností, podnikových přidružených společností nebo agentů) zahájíte přímo nebo nepřímo jakékoli přímé patentové tvrzení nebo o ně budete mít přímý finanční zájem: (i) proti Facebooku nebo jakémukoli jejích dceřiných společností nebo přidružených společností, (ii) proti kterékoli straně, pokud takové Patentové tvrzení zcela nebo zčásti vyplývá z jakéhokoli softwaru, technologie, produktu nebo služby Facebooku nebo kterékoli z jejích dceřiných společností nebo přidružených společností, nebo (iii) proti kterékoli straně týkající se Softwaru. [...] „Patent Assertion“ je jakýkoli soudní proces nebo jiná akce vycházející z přímého, nepřímého nebo přispívajícího porušení nebo podnětu k porušení jakéhokoli patentu, včetně vzájemného nároku nebo protinávrhu.[47]
The Softwarová nadace Apache považoval toto licenční ujednání za neslučitelné s jeho licenčními politikami, protože „přenáší riziko na následné spotřebitele našeho softwaru nevyvážené ve prospěch poskytovatele licence, nikoli nabyvatele licence, čímž porušuje naši právní politiku Apache jako univerzálního dárce“ a „ nejsou podmnožinou položek nalezených v [Apache License 2.0] a nelze je sublicencovat jako [Apache License 2.0] “.[48] V srpnu 2017 Facebook odmítl následné obavy nadace Apache Foundation a odmítl přehodnotit svou licenci.[49][50] Následující měsíc WordPress se rozhodl přesunout své projekty Gutenberg a Calypso z React.[51]
23. září 2017 Facebook oznámil, že příští týden znovu licencuje Flow, Žert, React a Immutable.js podle standardu Licence MIT; společnost uvedla, že React je „základem širokého ekosystému softwaru s otevřeným zdrojovým kódem pro web“ a že nechtějí „brzdit pokrok z netechnických důvodů“.[52]
26. září 2017 byla vydána React 16.0.0 s licencí MIT.[53] Změna licence MIT byla také backportována k vydání verze 15.x s React 15.6.2.[54]
Viz také
- Reagovat nativní
- AngularJS
- Úhlové
- Backbone.js
- Ember.js
- Štíhlý
- Vue.js
- Porovnání knihoven JavaScriptu
- Webové komponenty
Reference
- ^ Occhino, Tom; Walke, Jordan. „JS Apps at Facebook“. Youtube. Citováno 22. října 2018.
- ^ „Vydání v17.0.0“. 20. října 2020.
- ^ A b „Reagovat - knihovna JavaScript pro vytváření uživatelských rozhraní“. Reagovat. Citováno 7. dubna 2018.
- ^ Krill, Paul (15. května 2014). „Reagovat: Vytváření rychlejších a plynulejších uživatelských rozhraní pro webové aplikace založené na datech“. InfoWorld.
- ^ Hemel, Zef (3. června 2013). „Knihovna uživatelských rozhraní JavaScriptu reagujících na JavaScript přijímá smíšené recenze“. InfoQ.
- ^ Dawson, Chris (25. července 2014). „Historie JavaScriptu a jak to vedlo k ReactJS“. The New Stack.
- ^ Dere, Mohan (2018-02-19). „Jak integrovat aplikaci create-react-app se všemi knihovnami, které potřebujete k vytvoření skvělé aplikace“. freeCodeCamp. Citováno 2018-06-14.
- ^ Samp, Jon (01.01.2018). „React Router to Redux First Router“. O Codecademy. Citováno 2018-06-14.
- ^ „Redux · Předvídatelný kontejner stavu pro aplikace JS“. redux.js.org. Citováno 2019-10-23.
- ^ „React Router: Deklarativní směrování pro React“. Webová stránka ReactRouter. Citováno 2019-10-23.
- ^ „Součásti a rekvizity“. Reagovat. Facebook. Citováno 7. dubna 2018.
- ^ „Refs and the DOM“. Reagovat blog.
- ^ „Koncept: Specifikace JSX“. JSX. Facebook. Citováno 7. dubna 2018.
- ^ Clark, Andrew (26. září 2017). „Reagovat v16.0§Nové návratové typy vykreslení: fragmenty a řetězce“. Reagovat blog.
- ^ "React.Component: render". Reagovat.
- ^ Clark, Andrew (26. září 2017). „React v16.0§Support for custom DOM attributes“. Reagovat blog.
- ^ Fischer, Ludovico (06.09.2017). React for Real: Front-End Code, Unntangled. Pragmatická knihovna. ISBN 9781680504484.
- ^ „Proč jsme postavili React? - React Blog“.
- ^ „Izomorfní reakce PayPal“. Archivováno z původního dne 2019-02-08.
- ^ „Izomorfní reakce Netflixu“.
- ^ „Háčky na první pohled - reagovat“. reagovatjs.org. Citováno 2019-08-08.
- ^ „Co to sakra je React Hooks?“. Soshace. 2020-01-16. Citováno 2020-01-24.
- ^ „Používání státního háku - reagovat“. reagovatjs.org. Citováno 2020-01-24.
- ^ „Použití háku Effect - React“. reagovatjs.org. Citováno 2020-01-24.
- ^ „Odkaz na API háčků - reagovat“. reagovatjs.org. Citováno 2020-01-24.
- ^ „Rules of Hooks - React“. reagovatjs.org. Citováno 2020-01-24.
- ^ „Sestavte si vlastní háčky - reagujte“. reagovatjs.org. Citováno 2020-01-24.
- ^ „In Depth OverView“. Flux. Facebook. Citováno 7. dubna 2018.
- ^ Johnson, Nicholas. „Introduction to Flux - React Exercise“. Nicholas Johnson. Citováno 7. dubna 2018.
- ^ Abramov, Dan. „Historie reakce a toku s Danem Abramovem“. Tři Devs a možná. Citováno 7. dubna 2018.
- ^ „Nástroje pro správu státu - výsledky“. Stav JavaScriptu. Citováno 7. dubna 2018.
- ^ „Poznámky ke schůzce“. Reagovat Diskutovat. Citováno 2015-12-13.
- ^ "reagovat / budoucnost reakce - budoucnost reakce". GitHub. Citováno 2015-12-13.
- ^ „facebook / reagovat - problémy s požadavky na funkce“. GitHub. Citováno 2015-12-13.
- ^ Walke, Jordan. „FaxJS“. Citováno 11. července 2019.
- ^ A b Papp, Andrea (4. dubna 2018). „Historie React.js na časové ose“. RisingStack. Citováno 11. července 2019.
- ^ „Pete Hunt at TXJS“.
- ^ Frederic Lardinois (18. dubna 2017). „Facebook oznamuje React Fiber, přepsání své knihovny React“. TechCrunch. Citováno 19. dubna 2017.
- ^ „React Fiber Architecture“. Github. Citováno 19. dubna 2017.
- ^ ""Reagovat v16.0 ". reagovat.js. 26. 09. 2017. Citováno 2019-05-20.
- ^ ""Reagovat v16.8 ". reagovat.js. 16. 2. 2019. Citováno 2019-05-20.
- ^ „Představujeme háčky“. reagovat.js. Citováno 2019-05-20.
- ^ url =https://reactjs.org/blog/2020/08/10/react-v17-rc.html
- ^ „Reagovat CHANGELOG.md“. GitHub.
- ^ Liu, Austin. „Závažný důvod nepoužívat ReactJS“. Střední.
- ^ „Aktualizace našeho Open Source patentového grantu“.
- ^ „Dodatečné udělení patentových práv verze 2“. GitHub.
- ^ „ASF Legal dříve kladené otázky“. Softwarová nadace Apache. Citováno 2017-07-16.
- ^ „Vysvětlení licence React“. Facebook. Citováno 2017-08-18.
- ^ „Zvažte opětovnou licenci na AL v2.0, jak právě udělala RocksDB“. Github. Citováno 2017-08-18.
- ^ „WordPress upustí od reakce knihovny kvůli riziku doložky patentu na Facebooku“. TechCrunch. Citováno 2017-09-16.
- ^ „Relicensing React, Jest, Flow a Immutable.js“. Facebookový kód. 2017-09-23.
- ^ Clark, Andrew (26. září 2017). „Reagovat v16.0§MIT licencován“. Reagovat blog.
- ^ Hunzaker, Nathan (25. září 2017). „React v15.6.2“. Reagovat blog.