React (cadru web)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Reacţiona
software
Siglă
Tip Cadrul pentru aplicații web
Dezvoltator Facebook și comunitate
Data primei versiuni 29 mai 2013
Ultima versiune 17.0.2 (22 martie 2021)
Sistem de operare Multiplatform
Limba JavaScript
Licență Licență MIT
( Licență gratuită )
Site-ul web reactjs.org/

React (cunoscut și sub numele de React.js sau ReactJS ) este o bibliotecă open-source , front-end , JavaScript [1] pentru construirea interfețelor utilizator . Este întreținut de Facebook și de o comunitate de dezvoltatori și companii individuale. [2] [3] [4]

React poate fi folosit ca bază în dezvoltarea aplicațiilor cu o singură pagină , dar poate fi folosit și pe mobil prin React Native , o bibliotecă dezvoltată și de Facebook care transformă componentele React în componente native ( iOS și Android ) [5] . Cu toate acestea, React se preocupă doar de redarea datelor pe DOM , astfel încât crearea aplicațiilor React necesită, în general, utilizarea de biblioteci suplimentare pentru gestionarea stării și rutare. [6] Redux [7] și React Router [8] sunt exemple respective de astfel de biblioteci.

Utilizare de bază

Mai jos este un exemplu rudimentar de utilizare a React în HTML cu JSX și JavaScript.

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

< script type = "text / babel" >
 funcție Greeter ( recuzită ) {
  return < h1 > { recuzită . salut } < / h1>
 }
 var App = < Greeter greeting = "Hello World!" /> ;
 ReactDOM . render ( App , document . getElementById ( 'myReactApp' ));
</ script >

Funcția Greeter este o componentă React care acceptă o proprietate de greeting . Variabila App este o instanță a componentei Greeter cărei proprietate de greeting este setată la 'Hello World!' . Metoda ReactDOM.render redă apoi componenta Greeter din elementul DOM cu id myReactApp .

Vizualizat într-un browser web, rezultatul va fi:

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

Caracteristici demne de remarcat

Componente

Codul React este format din entități numite componente. Componentele pot fi redate pe un anumit element din DOM utilizând biblioteca React DOM. Când redați o componentă, puteți transmite valori cunoscute sub numele de „recuzită” [9] :

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

Cele două modalități principale de declarare a componentelor în React sunt prin componente funcționale și componente bazate pe clase.

Componente funcționale

Componentele funcționale sunt declarate cu o funcție care apoi returnează unele JSX.

 const Greeting = ( props ) => < div > Bună ziua , { props . nume } ! < / div>;

Componente bazate pe clase

Componentele bazate pe clase sunt declarate folosind clase ES6 . Ele sunt, de asemenea, cunoscute sub numele de componente „stateful”, deoarece starea lor poate conține valori în întreaga componentă și poate fi transmisă componentelor copil prin intermediul elementelor de recuzită:

 clasa ParentComponent extinde React . Componentă {
 state = { culoare : 'verde' };
 render () {
  retur (
   < ChildComponent color = { this . fost . culoare } />
  );
 }
}

DOM virtual

O altă caracteristică notabilă este utilizarea unui model de obiect de document virtual (DOM). React creează o memorie cache de structură de date în memorie, calculează diferențele rezultate și apoi actualizează în mod eficient DOM-ul afișat de browser. [10] Acest lucru permite programatorului să scrie cod ca și cum întreaga pagină este redată la fiecare modificare, în timp ce bibliotecile React redau doar subcomponenții care se modifică de fapt.

Metode ale ciclului de viață

Metodele ciclului de viață sunt cârlige care permit executarea codului în puncte prestabilite în timpul duratei de viață a unei componente.

  • shouldComponentUpdate permite dezvoltatorului să prevină redarea inutilă a unei componente prin returnarea falsă dacă nu este necesară redarea.
  • componentDidMount este apelat odată ce componenta este „montată” (componenta a fost creată în interfața cu utilizatorul, adesea prin legarea la un nod DOM ). Acesta este utilizat în mod obișnuit pentru a declanșa încărcarea datelor dintr-o sursă la distanță prin intermediul unui API .
  • componentWillUnmount este apelat imediat înainte ca componenta să fie demolată sau „demontată”. Acest lucru este utilizat în mod obișnuit pentru a șterge dependențele care necesită resurse de la componentă, care nu vor fi pur și simplu eliminate prin demontarea componentei (de exemplu, eliminarea oricărei instanțe setInterval() care este legată de componentă sau de un „EventListener” setat pe „document” datorită prezenței componentei).
  • render este cea mai importantă și singură metodă a ciclului de viață necesară pentru orice componentă. Se numește de obicei ori de câte ori starea componentei este actualizată, ceea ce ar trebui să se reflecte în interfața cu utilizatorul.

JSX

JSX sau JavaScript XML este o extensie a sintaxei limbajului JavaScript. [11] Similar aspectului HTML, JSX oferă o modalitate de structurare a redării componentelor utilizând o sintaxă familiară multor dezvoltatori. Componentele React sunt de obicei scrise folosind JSX, deși nu trebuie să fie (componentele pot fi scrise și în JavaScript pur). JSX este similar cu o altă sintaxă de extensie creată de Facebook pentru PHP numită XHP.

Un exemplu de cod JSX:

 clasa App extinde React . Componentă {
render () {
retur (
< div >
< p > Antet < / p>
< p > Conținut < / p>
< p > subsol < / p>
< / div>
);
}
}

Elemente imbricate

Mai multe elemente de la același nivel trebuie să fie închise într-un singur element care conține, cum ar fi elementul <div> prezentat mai sus sau returnat ca o matrice. [12]

Atribute

JSX oferă o serie de atribute de element concepute pentru a le reflecta pe cele furnizate de HTML. Atributele personalizate pot fi, de asemenea, transmise componentei. [13] Toate atributele vor fi primite de componentă ca elemente de recuzită.

Expresii JavaScript

Expresiile JavaScript (dar nu declarațiile) pot fi folosite în JSX cu paranteze {} :

 < h1 > { 10 + 1 } < / h1>

Exemplul de mai sus va arăta astfel:

 < h1 > 11 </ h1 >

Declarații condiționate

Instrucțiunile if-else nu pot fi utilizate în JSX, dar pot fi folosite expresii condiționale. Următorul exemplu va afișa { i === 1 ? 'true' : 'false' } ca șirul 'true' deoarece i este egal cu 1.

 clasa App extinde React . Componentă {
render () {
const i = 1 ;
retur (
< div >
< h1 > { i === 1 ? 'true' : 'false' } < / h1>
< / div>
);
}
}

Cele de mai sus vor reda:

 < div >
 < h1 > adevărat </ h1 >
</ div >

Funcțiile și JSX pot fi utilizate în condiționale:

 clasa App extinde React . Componentă {
render () {
secțiuni const = [ 1 , 2 , 3 ];
retur (
< div >
{ secțiuni . lungime > 0 && secțiuni . hartă ( n => (
/ * „cheia” este utilizată de React pentru a urmări elementele listei și modificările lor * /
/ * Fiecare „cheie” trebuie să fie unică * /
< div key = { "section-" + n } > Secțiunea { n } < / div>
))}
< / div>
);
}
}

Cele de mai sus vor reda:

 < div >
 < div > Secțiunea 1 </ div >
 < div > Secțiunea 2 </ div >
 < div > Secțiunea 3 </ div >
</ div >

Codul scris în JSX necesită conversia cu un instrument precum <i> Babel </i> înainte ca acesta să poată fi înțeles de browserele web. [14] Această procesare se face în general în timpul unui proces de construcție a software-ului înainte ca aplicația să fie implementată .

Arhitectură dincolo de HTML

Arhitectura de bază React se aplică în plus față de redarea HTML în browser. De exemplu, Facebook are o grafică dinamică care se redă în etichete <canvas> [15] , iar Netflix și PayPal folosesc încărcare universală pentru a reda cod HTML identic atât pe server cât și pe client. [16] [17]

Cârlige de React

Cârligele sunt funcții care permit dezvoltatorilor să „agațeze” starea React și caracteristicile ciclului de viață ale componentelor funcției. [18] Fac coduri lizibile și ușor de înțeles. Cârligele nu funcționează în cadrul claselor: vă permit să utilizați React fără clase. [19]

React oferă câteva cârlige useState , cum ar fi useState , [20] useContext , useReducer și useEffect [21] pentru a numi câteva. Toate sunt enumerate în Ghidul API de referință Hooks. [22] useState și useEffect , care sunt cele mai utilizate pe scară largă, sunt utile pentru controlul stărilor și respectiv al efectelor secundare din componentele React.

Hook reguli

Există, de asemenea, reguli de cârlig [23] care trebuie respectate înainte de a putea fi utilizate:

  1. Cârligele ar trebui să fie apelate doar la nivelul superior (nu în buclele din interior sau dacă sunt instrucțiuni ).
  2. Cârligele ar trebui să fie apelate numai de componentele funcției React, nu de funcțiile normale sau componentele clasei.

Cârlige personalizate

Crearea de cârlige personalizate [24] vă permite să extrageți logica componentelor în funcții reutilizabile. Un cârlig personalizat este o funcție JavaScript al cărui nume începe cu „utilizați” și care poate apela alte cârlige. Regulile generale ale cârligelor se aplică și celor personalizate.

Expresii obișnuite

React nu intenționează să ofere o „bibliotecă de aplicații” completă. Este conceput special pentru construirea de interfețe utilizator [1] și, prin urmare, nu include multe dintre instrumentele pe care unii dezvoltatori le-ar putea considera necesare pentru a construi o aplicație. Acest lucru vă permite să alegeți ce biblioteci preferă dezvoltatorul pentru a efectua sarcini precum accesul la rețea sau stocarea locală a datelor. Modele comune de utilizare au apărut pe măsură ce biblioteca s-a maturizat.

Utilizarea arhitecturii Flux

Pentru a sprijini conceptul React de flux de date unidirecțional (care contrastează cu fluxul bidirecțional al AngularJS ), arhitectura Flux este o alternativă la arhitectura populară model-vizualizare-controler . Flux include acțiuni care sunt trimise printr-un dispecer central la un magazin, iar modificările la acel magazin sunt propagate în vizualizare. [25] Atunci când este utilizat cu React, această propagare se face prin proprietățile componentelor.

Fluxul poate fi considerat o variantă a modelului Observer . [26]

O componentă React din arhitectura Flux nu ar trebui să modifice direct niciun obiect prop, ci ar trebui să fie transmisă funcțiilor de apel invers care creează acțiuni trimise de dispecer pentru a modifica magazinul. Acțiunea este un obiect a cărui responsabilitate este de a descrie ceea ce s-a întâmplat: de exemplu, o acțiune care descrie un utilizator care „urmărește” altul ar putea conține un ID de utilizator, un ID de utilizator țintă și tipul USER_FOLLOWED_ANOTHER_USER . [27] Magazinele, care pot fi considerate șabloane, se pot schimba ca răspuns la acțiunile primite de dispecerat.

Acest model este uneori exprimat ca „proprietățile curg în jos, acțiunile curg în sus”. Multe implementări ale Flux au fost create de la înființare, dintre care probabil cel mai cunoscut este Redux, care are un singur magazin, adesea numit o singură sursă de adevăr (SSOT) . [28]

Dezvoltare viitoare

Starea proiectului poate fi monitorizată prin intermediul forumului de discuții al echipei de bază. [29] Cu toate acestea, principalele modificări ale React trec prin problemele depozitului Future of React și solicitări de extragere . [30] [31] Acest lucru permite comunității React să ofere feedback cu privire la potențiale caracteristici noi, API-uri experimentale și îmbunătățiri ale sintaxei JavaScript.

Istorie

React a fost creat de Jordan Walke, un inginer de software Facebook, care la numit inițial „FaxJS”. [32] A fost influențat de XHP, o bibliotecă de componente HTML pentru PHP . A fost folosit pentru prima dată pe News News de Facebook în 2011 și mai târziu pe Instagram în 2012. [33] A fost lansat publicului la JSConf US în mai 2013. [34]

React Native, care permite dezvoltarea nativă a Android , iOS și UWP cu React, a fost anunțat la React Conf din Facebook în februarie 2015 și lansat în martie 2015.

Pe 18 aprilie 2017, Facebook a anunțat React Fiber, un nou algoritm de bază din biblioteca React pentru construirea interfețelor utilizator . [35] React Fiber a fost conceput ca bază pentru orice îmbunătățiri și dezvoltări viitoare ale bibliotecii React. [36]

Pe 26 septembrie 2017, React 16.0 a fost lansat publicului. [37]

Pe 16 februarie 2019, React 16.8 a fost lansat publicului. [38] Versiunea a introdus cârlige. [39]

Versiuni
Versiune Data de lansare Schimbări
0.3.0 29 mai 2013 Lansare publică inițială
0.4.0 20 iulie 2013 Suport pentru nodul de comentarii <div> {/ * * /} </div>, îmbunătățirea API-ului de redare pe partea de server, eliminarea React.autoBind, suport pentru cheia prop, îmbunătățirea modulului, remedierea erorilor.
0,5,0 20 octombrie 2013 Utilizare îmbunătățită a memoriei, asistență pentru evenimente de selecție și compoziție, asistență pentru getInitialState și getDefaultProps în mixins, adăugare React.version și React.isValidClass, compatibilitate îmbunătățită pentru Windows.
0,8,0 20 decembrie 2013 Suport adăugat pentru rânduri și coloane, amânare și asincronizare, bucle pentru <audio> și <video>, atribute de corectare automată. S-au adăugat evenimente ContextMenu, jstransform actualizat, esprima-fb și browserify.
0.9.0 20 februarie 2014 S-a adăugat suport pentru crossOrigin, download și hrefLang, mediaGroup și muted, sandbox, seamless și srcDoc, atribute de scop. S-a adăugat orice, arrayOf, componentă, oneOfType, redabil, formă la React.PropTypes, S-a adăugat suport pentru evenimente onMouseOver și onMouseOut, S-a adăugat suport pentru onLoad și onError pe elementele <img>.
0.10.0 21 martie 2014 Suport adăugat pentru atributele srcSet și textAnchor, funcție de actualizare adăugată pentru date imuabile, verificați dacă eticheta de închidere este exclusă din toate elementele nule.
0,11,0 17 iulie 2014 Suport SVG îmbunătățit, eveniment e.view normalizat, actualizare comandă $ apply, adăugare suport spații de nume, adăugare nouă API transformWithDetails, include pachete precompilate sub dist /, MyComponent () returnează acum un descriptor, mai degrabă decât o instanță.
0,12,0 21 noiembrie 2014 Au fost adăugate noi funcții: s-a introdus operatorul Spread ({...}) pentru a renunța la acest lucru.transferPropsTo. S-a adăugat suport pentru acceptCharset, classID, atribute manifest HTML, React.addons.batchedUpdate adăugat la API, @jsx React.DOM nu mai este necesar. S-au rezolvat problemele cu tranzițiile CSS.
0.13.0 10 martie 2015 Modelele învechite raportate în 0,12 nu mai funcționează, ordinea de rezolvare a referințelor s-a schimbat. Au fost eliminate proprietățile this._pendingState și this._rootNodeID. Suport pentru clase ES6, adăugare API (componentă) React.findDOMNode, suport pentru iteratoare și secvențe imutabile, React.addons.createFragment noua funcționalitate adăugată, React.addons.classSet depreciat.
0.14.1 29 octombrie 2015 S-a adăugat suport pentru srcLang, implicit, atribute de tip și atribut de culoare, s-a acordat acces moștenit .props pe nodurile DOM, s-a fixat ScryRenderedDOMComponentsWithClass, s-a adăugat react-dom.js.
15.0.0 7 aprilie 2016 Redarea inițială utilizează acum document.createElement în loc să genereze HTML, Nu mai există extra <span>, suport SVG îmbunătățit, ReactPerf.getLastMeasurements () este opac, noi deprecieri introduse cu un avertisment, au remediat câteva scurgeri de memorie mici, React DOM acceptă acum citarea și atribute HTML de profil și proprietățile CSS cssFloat, gridRow și gridColumn.
15.1.0 20 mai 2016 S-a remediat o eroare de lot, a oferit acces la cea mai recentă atribuire de obiecte, s-a remediat regresia, s-a eliminat utilizarea utilitarului de îmbinare, s-a redenumit unele module.
15.2.0 1 ° iulie 2016 Inclusiv informații despre stiva de componente, validarea elementelor de recuzită eliminate la momentul montării, adăugarea React.PropTypes.symbol, gestionarea onLoad la <link>, manipularea onError la elementul <source>, API isRunning (), regresie de performanță fixă.
15.3.0 30 iulie 2016 S-a adăugat React.PureComponent, problemă fixă ​​de redare a serverului imbricat, s-au adăugat xmlns, xmlnsXlink pentru a suporta atributele SVG și referrerPolicy la atributele HTML, actualizare reactivă React Perf, fix ref.
15.3.1 19 august 2016 Performanță îmbunătățită a dezvoltării construcției, curățarea cârligelor interne, fbj-uri actualizate, timpi de pornire React îmbunătățiți, scurgeri de memorie fixe în randarea serverului, redare fixă ​​React Test Renderer, invariant trackedTouchCount pe console.error.
15.4.0 16 noiembrie 2016 Pachetul React și construirea browserului nu mai includ React DOM, performanță de dezvoltare îmbunătățită, erori de testare ocazionale remediate, actualizare API batchUpdates, React Perf și ReactTestRenderer.create ().
15.4.1 23 noiembrie 2016 Restructurarea atribuirii variabilelor, gestionarea corectă a evenimentelor, compatibilitatea corectă a construcției browserului în mediile AMD.
15.4.2 6 ianuarie 2017 S-au rezolvat problemele de construcție, s-au adăugat dependențe de pachet lipsă, mesaje de eroare îmbunătățite.
15.5.0 7 aprilie 2017 S-au adăugat react-dom / test-utils, s-au eliminat dependențele peer, s-a rezolvat problema cu Closure Compiler, s-a adăugat un avertisment de depreciere pentru React.createClass și React.PropTypes, s-a remediat eroarea pe Chrome.
15.5.4 11 aprilie 2017 S-a rezolvat compatibilitatea cu Enzyme expunând actualizări batched la randatoarele de suprafață, versiunea actualizată a tipurilor de prop, pachetul fix react-addons-create-fragment, pentru a include transformarea învechită.
15.6.0 13 iunie 2017 S-a adăugat suport pentru variabilele CSS în atributele stilului Grid și proprietățile stilului, s-a rezolvat suportul AMD pentru add-on-uri bazate pe reacție, a eliminat dependența inutilă, s-a adăugat avertisment de depreciere pentru ajutoarele din fabrică React.createClass și React.
16.0.0 26 septembrie 2017 Îmbunătățirea gestionării erorilor cu introducerea „limitelor de eroare”, permis trecerea la React DOM a atributelor non-standard, modificări minore ale comportamentului setState, eliminarea react-con-addons.js, adăugarea React.createClass ca create-react -class, React.PropTypes ca prop-types, React.DOM ca react-dom-factory, modificări ale comportamentului planificării și metodelor ciclului de viață.
16.1.0 9 noiembrie 2017 Înlăturarea versiunilor Bower, remediați o variabilă globală suplimentară accidentală în versiunile UMD, remediați activarea onMouseEnter și onMouseLeave, remediați <textarea> plceholder, eliminați codul neutilizat, adăugați lipsa dependenței package.json, adăugați suport pentru React DevTools.
16.3.0 29 martie 2018 S-a adăugat un nou API de context acceptat oficial, s-a adăugat un nou pachet, s-a fixat o buclă infinită la redarea portalurilor cu SSR, s-a rezolvat problema cu acest stat, s-a rezolvat problema pe IE / Edge.
16.3.1 3 aprilie 2018 Prefixul API privat, regresia de performanță fixă ​​și gestionarea erorilor în modul de dezvoltare, au adăugat dependență de la egal la egal, au reparat un avertisment fals pozitiv pe IE11 atunci când se utilizează Fragment.
16.3.2 16 aprilie 2018 S-au rezolvat blocările IE, s-au remediat etichetele în măsurătorile de sincronizare a utilizatorilor, s-au adăugat construcții UMD, s-au îmbunătățit performanța API unstable_observedBits cu cuibărire.
16.4.0 24 mai 2018 S-a adăugat suport pentru specificațiile Pointer Events, s-a adăugat capacitatea de a specifica propTypes, s-a corectat contextul de citire, s-a fixat suportul pentru getDerivedStateFromProps (), s-a rezolvat problema testInstance.parent, s-a adăugat componenta React.unstable_Profiler pentru a măsura performanța, s-au schimbat numele evenimentelor interne.
16.5.0 5 septembrie 2018 S-a adăugat suport pentru React DevTools Profiler, gestionarea discretă a erorilor în mai multe cazuri de margine, s-a adăugat react-dom / profilare, s-a adăugat eveniment AuxClick pentru browser, s-au adăugat câmpuri motionX și motionY la evenimentele mouse-ului, s-au adăugat câmpuri de presiune tangențială și rotație la evenimentul pointer.
16.6.0 23 octombrie 2018 S-a adăugat suport pentru contextType, suport pentru niveluri de prioritate încorporate, continuări și apeluri de apel, mecanism de rezervă îmbunătățit, suprapunere gri fixă ​​pe iOS Safari, s-a adăugat React.lazy () pentru componentele de divizare a codului.
16.7.0 20 decembrie 2018 S-au remediat performanțele React.lazy pentru componentele încărcate leneș, s-au eliminat câmpurile de pe unmount pentru a evita scurgerile de memorie, s-a remediat eroarea în SSR, s-a remediat regresia de performanță.
16.8.0 6 februarie 2019 S-au adăugat cârlige, s-au adăugat ReactTestRenderer.act () și ReactTestUtils.act () pentru actualizări de loturi, suport pentru elemente sincrone trecute către React.lazy (), API de inițializare a cârligului de utilizare leneșă îmbunătățită.
16.8.6 27 martie 2019 S-a remediat salvarea incorectă în useReducer (), s-au remediat avertismentele iframe din Safari DevTools, avertismentul privind setarea contextType la Context.Consumer în loc de Context, avertisment privind setarea contextType la valori nevalide.
16.9.0 9 august 2019 A fost adăugat API-ul <React.Profiler> pentru colectarea programată a măsurătorilor de performanță. eliminat unstable_ConcurrentMode în favoarea unstable_createRoot
16.10.0 27 septembrie 2019 S-a remediat cazul limită în care nu a fost stocată o actualizare de cârlig. remediu euristic pentru a determina când să se hidrateze, pentru a nu-l lansa eronat în timpul unei actualizări. S-au eliminat câmpurile de fibre suplimentare în timpul demontării pentru a economisi memorie. Remedierea erorilor la câmpurile de text obligatorii din Firefox. Object.este preferința în loc de polimplare în linie, dacă este disponibilă. Remedierea erorilor la îmbinarea suspensiei cu gestionarea erorilor.
16.10.1 28 septembrie 2019 S-a remediat regresia în aplicațiile Next.js care permit nepotrivirea suspensiei în timpul hidratării pentru o procedură silențioasă
16.10.2 3 octombrie 2019 S-a remediat regresia în react-native-web prin restabilirea ordinii argumentelor în extractorii de plugin-uri pentru evenimente
16.11.0 22 octombrie 2019 S-a remediat aruncarea dublă a manipulatorilor mouse-ului în containerele React imbricate. Au fost eliminate API-urile experimentale unstable_createRoot și unstable_createSyncRoot. (Acestea sunt disponibile în canalul experimental ca createRoot și createSyncRoot.)
16.12.0 14 noiembrie 2019 React DOM - Efecte pasive fixe (useEffect) care nu sunt activate în aplicația multi-root.

React Is - S-au remediat tipurile de leneși și memo-uri, fiind considerate mai degrabă elemente decât componente

16.13.0 26 februarie 2020 Funcții adăugate în modul React Concurrent. S-au remediat regresiile din biblioteca principală React și React Dom.

Licențierea

Lansarea publică inițială a React în mai 2013 a folosit licența Apache 2.0 . În octombrie 2014, React 0.12.0 l-a înlocuit cu licența BSD cu 3 clauze și a adăugat un fișier text PATENTE separat care dă consimțământul pentru utilizarea oricăror brevete Facebook legate de software: [40]

Licența acordată aici va înceta, automat și fără notificare prealabilă, pentru oricine depune vreo reclamație (inclusiv depunerea oricărei acțiuni în justiție, afirmație sau altă acțiune) referitoare la (a) încălcarea sau motivarea directă, indirectă sau contributivă la încălcarea oricărui brevet: (i ) de Facebook sau de oricare dintre filialele sau afiliații săi, indiferent dacă o astfel de reclamație este legată sau nu de Software, (ii) de către orice parte dacă o astfel de reclamație apare în totalitate sau parțial din orice software, produs sau serviciu de Facebook sau ale filialelor sau afiliaților săi, indiferent dacă o astfel de cerere este legată sau nu de Software sau (iii) de orice parte legată de Software; sau (b) că orice drept asupra oricărei cereri de brevet Facebook este invalid sau inaplicabil.

Această clauză neconvențională a provocat unele controverse și dezbateri în comunitatea utilizatorilor React, deoarece ar putea fi interpretată pentru a permite Facebook-ului să revoce licența în multe scenarii, de exemplu, dacă Facebook dă în judecată licențiatul, îndemnându-i să ia „alte acțiuni” prin postarea licență. acțiune pe un blog sau în altă parte. Mulți și-au exprimat îngrijorarea că Facebook ar putea exploata în mod nedrept clauza de reziliere sau că integrarea React într-un produs ar putea complica achiziția viitoare a unei companii start-up. [41]

Pe baza feedback-ului comunității, Facebook a actualizat acordarea brevetului în aprilie 2015 pentru a o face mai puțin ambiguă și mai permisivă: [42]

Licența acordată ulterior va înceta, automat și fără notificare, dacă dvs. (sau oricare dintre filialele dvs., afiliați sau agenți corporativi) inițiați direct sau indirect sau aveți un interes financiar direct în orice declarație de brevet: (i) împotriva Facebook sau a oricăruia dintre filiale sau filiale corporative, (ii) împotriva oricărei părți dacă o astfel de declarație de brevet derivă în totalitate sau parțial din orice software, tehnologie, produs sau serviciu al Facebook sau al oricăreia dintre filialele sau filialele sale corporative sau (iii) împotriva oricărei părți legate de software-ul. [...] O „Declarație de brevet” este orice acțiune în justiție sau altă acțiune legată de o încălcare directă, indirectă sau contributivă sau motiv de încălcare a oricărui brevet, inclusiv o cerere sau o cerere reconvențională. [43]

Apache Software Foundation a găsit acest acord de licențiere incompatibil cu politicile sale de licențiere, întrucât „trece riscul consumatorului din aval al software-ului nostru dezechilibrat în favoarea licențiatorului, nu a titularului de licență, încălcând astfel politica noastră legală Apache. Să fie un donator universal” și „nu sunt un subset al celor din [Licența Apache 2.0] și nu pot fi licențiați ca [Licență Apache 2.0]”. [44] În august 2017, Facebook a respins preocupările din aval ale Fundației Apache și a refuzat să își reconsidere licența. [45] [46] Luna următoare, WordPress a decis să reconfigureze proiectele sale Gutenberg și Calypso în afara React. [47]

Pe 23 septembrie 2017, Facebook a anunțat că săptămâna următoare va revizui licențierea Flow, Jest, React și Immutable.js cu o licență standard MIT ; compania a susținut că React a fost „fundamentul unui vast ecosistem de software web open source” și că nu doreau „să împiedice progresul din motive non-tehnice”. [48]

Pe 26 septembrie 2017, React 16.0.0 a fost lansat sub licența MIT. [49] Trecerea la licența MIT a fost, de asemenea, inclusă în linia de lansare 15.x cu React 15.6.2. [50]

Notă

  1. ^ a b React - O bibliotecă JavaScript pentru construirea interfețelor utilizator , la it.reactjs.org . Adus la 22 martie 2020 .
  2. ^ (EN) Paul Krill, React: Efectuarea unor interfețe web mai rapide și mai fluide pentru aplicațiile bazate pe date , în InfoWorld , 15 mai 2014. Accesat pe 22 martie 2020.
  3. ^ (EN) Zef Hemel, Biblioteca de interfețe a utilizatorului JavaScript React de la Facebook primește recenzii mixte în InfoQ, 3 iunie 2013. Accesat la 22 martie 2020.
  4. ^ (EN) Chris Dawson, JavaScript's History and How It Led To ReactJS , în The New Stack, 25 iulie 2014. Adus 22 martie 2020.
  5. ^ (EN) Stanislav, How React Native App Development Works Under the Hood , de la MobiDev. Adus de 03 aprilie 2021.
  6. ^ (EN) Jon Samp, React Router to Router Redux First , pe mediu , 13 ianuarie 2018. Accesat la 22 martie 2020.
  7. ^ (EN) Redux - Un container de stare previzibil pentru aplicațiile JavaScript. , la redux.js.org . Adus la 22 martie 2020 .
  8. ^ (EN) React Router: Rutare declarativă pentru React.js , pe reacttraining.com. Adus la 22 martie 2020 .
  9. ^ Componente și accesorii , pe it.reactjs.org . Adus la 22 martie 2020 .
  10. ^ ( EN ) Refs și DOM , pe it.reactjs.org . Adus la 22 martie 2020 .
  11. ^ (EN) Proiect: Specificație JSX , pe facebook.github.io. Adus la 22 martie 2020 .
  12. ^ (RO) Andrew Clark, React v16.0§Nou tipuri de returnare: fragmente și șiruri pe React Blog, 26 septembrie 2017. Accesat 22 martie 2020.
  13. ^ (RO) Andrew Clark, React v16.0§ Suport pentru atribute DOM personalizate , din React Blog, 26 septembrie 2017. Accesat 22 martie 2020.
  14. ^ (EN) Ludwig Fischer, React for Real: Front-End Code, Untangled , Pragmatic Bookshelf, 6 septembrie 2017, ISBN 9781680504484 .
  15. ^ (RO) Pete Hunt, de ce am construit React? , pe React Blog , 5 iunie 2013. Adus pe 23 martie 2020 .
  16. ^ (EN) Ingineria PayPal , Isomorphic React React with Apps-Engine , pe mediu , 27 aprilie 2015. Accesat pe 23 martie 2020.
  17. ^ (EN) Netflix Technology Blog, Netflix Likes React on Medium , 28 ianuarie 2015. Accesat pe 23 martie 2020.
  18. ^ Hooks Overview , la it.reactjs.org . Adus de 23 martie 2020.
  19. ^ (EN) Dillion Megida, Ce naiba este React Hooks? , în Soshace , 16 ianuarie 2020. Adus 23 martie 2020 .
  20. ^ Folosind Hook State , pe it.reactjs.org . Adus de 23 martie 2020.
  21. ^ (RO) Folosiți Efectul Hook pe it.reactjs.org. Adus de 23 martie 2020.
  22. ^ ( EN ) Hooks Reference API , la it.reactjs.org . Adus de 23 martie 2020.
  23. ^ Hooks Rules , la it.reactjs.org . Adus de 23 martie 2020.
  24. ^ Cârlige personalizate , la it.reactjs.org . Adus de 23 martie 2020.
  25. ^ (RO) Prezentare generală în profunzime , pe facebook.github.io/flux. Adus de 23 martie 2020.
  26. ^ (RO) Introducere în exercițiul Flux - React , pe nicholasjohnson.com. Adus de 23 martie 2020.
  27. ^ ( EN ) Dan Abramov, The History of React and Flux with Dan Abramov , su Three Devs and a Maybe , 6 novembre 2015. URL consultato il 23 marzo 2020 .
  28. ^ ( EN ) State Management Tools - Results , su The State of JavaScript . URL consultato il 23 marzo 2020 .
  29. ^ ( EN ) Where To Get Support , su it.reactjs.org . URL consultato il 23 marzo 2020 .
  30. ^ The Future of React(?) , su GitHub . URL consultato il 23 marzo 2020 .
  31. ^ Issues · facebook/react , su GitHub . URL consultato il 23 marzo 2020 .
  32. ^ jordwalke/FaxJs: Fax Javascript Ui Framework , su GitHub . URL consultato il 23 marzo 2020 .
  33. ^ Filmato audio ( EN ) TXJS, Pete Hunt | TXJS 2015 , su YouTube , 28 luglio 2015. URL consultato il 23 marzo 2020 .
  34. ^ ( EN ) Ferenc Hámori, The History of React.js on a Timeline , in RisingStack , 4 aprile 2018. URL consultato il 23 marzo 2020 .
  35. ^ Frederic Lardinois, Facebook announces React Fiber, a rewrite of its React library , TechCrunch, 18 aprile 2017. URL consultato il 19 aprile 2017 .
  36. ^ React Fiber Architecture , su GitHub . URL consultato il 23 marzo 2020 .
  37. ^ ( EN ) Andrew Clark,React v16.0 , su reactjs.org , 26 settembre 2017. URL consultato il 23 marzo 2020 .
  38. ^ ( EN ) Dan Abramov, React v16.8: The One With Hooks , su React Blog , 6 febbraio 2019. URL consultato il 23 marzo 2020 .
  39. ^ Introduzione agli Hooks , su it.reactjs.org . URL consultato il 23 marzo 2020 .
  40. ^ ( EN ) React CHANGELOG.md , su GitHub . URL consultato il 25 marzo 2020 .
  41. ^ ( EN ) Berkana, A compelling reason not to use ReactJS , su Medium , 25 maggio 2015. URL consultato il 25 marzo 2020 .
  42. ^ ( EN ) Updating Our Open Source Patent Grant , su engineering.fb.com , 10 aprile 2015. URL consultato il 25 marzo 2020 .
  43. ^ ( EN ) Additional Grant of Patent Rights Version 2 , su GitHub . URL consultato il 25 marzo 2020 .
  44. ^ ( EN ) ASF 3rd Party License Policy , su apache.org , Apache Software Foundation . URL consultato il 25 marzo 2020 .
  45. ^ ( EN ) Explaining React's license , su engineering.fb.com , 18 agosto 2017. URL consultato il 25 marzo 2020 .
  46. ^ ( EN ) Consider re-licensing to AL v2.0, as RocksDB has just done , su GitHub . URL consultato il 25 marzo 2020 .
  47. ^ ( EN ) Natasha Lomas, WordPress to ditch React library over Facebook patent clause risk , in TechCrunch , 15 settembre 2017. URL consultato il 25 marzo 2020 .
  48. ^ ( EN ) Relicensing React, Jest, Flow, and Immutable.js , su engineering.fb.com , 23 settembre 2017. URL consultato il 25 marzo 2020 .
  49. ^ ( EN ) Andrew Clark, React v16.0§MIT licensed , su React Blog , 26 settembre 2017. URL consultato il 25 marzo 2020 .
  50. ^ ( EN ) Nathan Hunzaker, React v15.6.2 , su React Blog , 25 settembre 2017. URL consultato il 25 marzo 2020 .

Voci correlate

Collegamenti esterni

Controllo di autorità GND ( DE ) 1106873289