React (nettrammeverk)

React-
programvare
SjangerRammeverk for webapplikasjoner
UtviklerMeta og fellesskap
Dato for første versjon29. mai 2013
Siste versjon18.2.0 (14. juni 2022)
OperativsystemMultiplattform
SpråkJavaScript
TillatelseMIT
-lisens ( gratis lisens )
Nettstedreactjs.org/ , ar.reactjs.org/ og ru.reactjs.org/

React (også kjent som React.js eller ReactJS ) er et åpen kildekode , frontend , JavaScript [1] bibliotek for å bygge brukergrensesnitt . Det vedlikeholdes av Meta (tidligere Facebook) og et fellesskap av individuelle utviklere og selskaper. [2] [3] [4]

React kan brukes som grunnlag i utviklingen av enkeltsideapplikasjoner , men den kan også brukes på mobil gjennom React Native , et bibliotek også utviklet av Meta som transformerer React-komponenter til native komponenter ( iOS og Android ) [5] . Imidlertid er React bare opptatt av å gjengi data på DOM , så å bygge React-applikasjoner krever generelt bruk av ekstra biblioteker for tilstandsadministrasjon og ruting. [6] Redux [7] og React Router [8] er respektive eksempler på slike biblioteker.

Grunnleggende bruk

Nedenfor er et rudimentært eksempel på bruk av React i HTML med JSX og JavaScript.

< div id = "myReactApp" > </ div > < script type = "tekst / babel" > funksjon Greeter ( rekvisitter ) { return < h1 > { props . hilsen } < / h1> } var App = < Greeter hilsen = "Hello World!" /> ; ReactDOM . render ( App , document . getElementById ( 'myReactApp' )); </ script >

Funksjonen Greeterer en React-komponent som aksepterer en egenskap greeting. Variabelen Apper en forekomst av komponenten Greeterhvis egenskap greetinger satt til 'Hello World!'. Metoden ReactDOM.rendergjengir deretter Greeter-komponenten inne i DOM -elementet med id myReactApp.

Sett i en nettleser vil resultatet være:

< div id = "myReactApp" > < h1 > Hei verden! </ h1 > </ div >

Bemerkelsesverdige funksjoner

Komponenter

React-kode er bygd opp av enheter som kalles komponenter. Komponenter kan gjengis på et bestemt element i DOM ved å bruke React DOM-biblioteket. Når du gjengir en komponent, kan du sende verdier kjent som "rekvisitter" [9] :

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

De to hovedmåtene å deklarere komponenter i React er gjennom funksjonelle komponenter og klassebaserte komponenter.

Funksjonelle komponenter

Funksjonelle komponenter er deklarert med en funksjon som deretter returnerer noe JSX.

const Hilsen = ( rekvisitter ) => < div > Hei , { rekvisitter . navn } ! < / div>;

Klassebaserte komponenter

Klassebaserte komponenter er deklarert ved bruk av ES6- klasser . De er også kjent som "stateful" komponenter, fordi deres tilstand kan inneholde verdier gjennom hele komponenten og kan sendes til underordnede komponenter via rekvisitter:

klasse ParentComponent utvider React . Komponent { state = { color : 'green' }; render () { return ( < ChildComponent color = { this . state . color } /> ); } }

Virtual DOM

En annen bemerkelsesverdig funksjon er bruken av en virtuell dokumentobjektmodell (DOM). React oppretter en datastrukturbuffer i minnet, beregner de resulterende forskjellene og oppdaterer deretter effektivt DOM-en som vises av nettleseren. [10] Dette lar programmereren skrive kode som om hele siden gjengis ved hver endring, mens React-bibliotekene bare gjengir underkomponenter som faktisk endres.

Livssyklusmetoder

Livssyklusmetoder er kroker som tillater kodeutførelse på forhåndsbestemte punkter i løpet av en komponents levetid.

  • shouldComponentUpdatelar utvikleren forhindre unødvendig gjengivelse av en komponent ved å returnere falsk hvis en gjengivelse ikke er nødvendig.
  • componentDidMountden kalles når komponenten er "montert" (komponenten er opprettet i brukergrensesnittet, ofte ved å assosiere den med en DOM -node ). Dette brukes ofte til å utløse lasting av data fra en ekstern kilde via en API .
  • componentWillUnmountdet kalles opp umiddelbart før komponenten rives eller "demonteres". Dette brukes ofte til å slette ressurskrevende avhengigheter av komponenten som ganske enkelt ikke vil bli fjernet ved å avmontere komponenten (for eksempel fjerning av enhver instans setInterval()som er relatert til komponenten eller en "eventListener" satt til "dokumentet" på grunn av tilstedeværelseskomponent).
  • renderdet er den viktigste livssyklusmetoden og den eneste som kreves i noen komponent. Det kalles vanligvis når komponenttilstanden oppdateres, noe som bør gjenspeiles i brukergrensesnittet.

JSX

JSX, eller JavaScript XML , er en utvidelse av JavaScript-språksyntaksen. [11] I likhet med HTML gir JSX en måte å strukturere komponentgjengivelse ved å bruke en syntaks som er kjent for mange utviklere. React-komponenter er vanligvis skrevet med JSX, selv om de ikke trenger å være det (komponenter kan også skrives i ren JavaScript). JSX ligner på en annen utvidelsessyntaks laget av Facebook for PHP kalt XHP.

Et eksempel på JSX-kode:

klasse App utvider React . Komponent { gjengi () { returnere ( < div > < p > Overskrift < / p> < p > Innhold < / p> < p > Bunntekst < / p> < /div> ); } } Nestede elementer

Flere elementer på samme nivå må være innelukket i et enkelt inneholdende element som elementet <div>vist ovenfor eller returneres som en matrise. [12]

Attributter

JSX tilbyr en rekke elementattributter designet for å speile de som leveres av HTML. Egendefinerte attributter kan også overføres til komponenten. [13] Alle attributter vil bli mottatt av komponenten som rekvisitter.

JavaScript-uttrykk

JavaScript- uttrykk ( men ikke utsagn) kan brukes i JSX med krøllede parenteser {}:

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

Eksemplet ovenfor vil se slik ut:

< h1 > 11 </ h1 > Betingede utsagn

If-else-setninger kan ikke brukes i JSX, men betingede uttrykk kan brukes. Følgende eksempel vil vise { i === 1 ? 'true'  : 'false' }som en streng 'true'hvorfor iden er lik 1.

klasse App utvider React . Komponent { gjengi () { const i = 1 ; returnere ( < div > < h1 > { i === 1 ? 'true' : 'false' } < / h1> < /div> ); } }

Ovennevnte vil gjengi:

< div > < h1 > sant </ h1 > </ div >

Funksjoner og JSX kan brukes i betingelser:

klasse App utvider React . Komponent { gjengi () { const seksjoner = [ 1 , 2 , 3 ]; returnere ( < div > { seksjoner . lengde > 0 && seksjoner . kart ( n => ( / * 'nøkkel' brukes av react for å holde styr på listeelementer og deres endringer * / / * Hver 'nøkkel' må være unik * / < div- tast = { "seksjon-" + n } > Seksjon { n } < / div> ))} < /div> ); } }

Ovennevnte vil gjengi:

< div > < div > Seksjon 1 </ div > < div > Seksjon 2 </ div > < div > Seksjon 3 </ div > </ div >

Kode skrevet i JSX krever konvertering med et verktøy som <i> Babel </i> før den kan forstås av nettlesere. [14] Denne behandlingen gjøres vanligvis under programvarebyggingsprosessen før applikasjonen distribueres .

Arkitektur utover HTML

Kjernearkitekturen til React gjelder i tillegg til HTML-gjengivelse i nettleseren. For eksempel har Facebook dynamisk grafikk som gjengis i tagger <canvas>[15] og Netflix og PayPal bruker universell opplasting for å gjengi identisk HTML på både serveren og klienten. [16] [17]

React Hooks

Hooks, introdusert i versjon 16.8 (februar 2019), er funksjoner som lar utviklere "hekte" til tilstanden til React og livssykluskarakteristikkene til funksjonskomponentene. [18] De gjør koder lesbare og enkle å forstå. Kroker fungerer ikke i klassene: de lar deg bruke React uten klasser. [19]

React har noen innebygde kroker som useState, [20] useContext og useReducer[ useEffect21] for å nevne noen. De er alle oppført i Hooks Reference API Guide. [22] useState og useEffect, som er de mest brukte, er nyttige for å kontrollere henholdsvis tilstandene og bivirkningene i React-komponentene.

Eksempel på bruk useStatei en funksjonell komponent.

const BirthdayComponent = () => { const [ myAge , setMyAge ] = useState ( 16 ); const handleClick = () => setMyAge ( minAlder + 1 ); return ( <> < p > Min faktiske alder er { myAge }. < / p> { myAge > = 18 && < p > ... og er jeg voksen < / p >} < button onClick = { handleClick } > Legg til ett år < / button> < /> ); }; Hook Rules

Det er også krokerregler [23] som må følges før de kan brukes:

  1. Hooks skal bare kalles på toppnivå (ikke innenfor loops eller if statements ).
  2. Hooks skal bare kalles opp av React-funksjonskomponenter, ikke normale funksjoner eller klassekomponenter.
Custom Hooks

Ved å lage tilpassede kroker [24] kan du trekke ut komponentlogikk til gjenbrukbare funksjoner. En tilpasset hook er en JavaScript-funksjon hvis navn begynner med "bruk" og som kan kalle andre kroker. De generelle reglene for kroker gjelder også for tilpassede.

Vanlige idiomer

React har ikke til hensikt å tilby et komplett "applikasjonsbibliotek". Den er designet spesielt for å bygge brukergrensesnitt [1] og inkluderer derfor ikke mange av verktøyene som enkelte utviklere kan finne nødvendige for å bygge en applikasjon. Dette lar deg velge hvilke biblioteker utvikleren foretrekker til å utføre oppgaver som nettverkstilgang eller lokal datalagring. Vanlige bruksmønstre har dukket opp etter hvert som biblioteket har modnet.

Bruke Flux-arkitekturen

For å støtte Reacts konsept med enveis dataflyt (som står i kontrast til AngularJS sin toveisflyt ), er Flux-arkitekturen et alternativ til den populære modell-visningskontroller- arkitekturen . Flux inkluderer handlinger som sendes via en sentral koordinator til en butikk , og endringer i den butikken forplantes til visningen. [25] Når den brukes med React, gjøres denne forplantningen gjennom komponentegenskaper.

Flux kan betraktes som en variant av Observer-mønsteret . [26]

En React-komponent under Flux-arkitekturen skal ikke direkte modifisere noen prop-objekter, men skal sendes til tilbakeringingsfunksjonene som oppretter handlinger sendt av avsenderen for å endre butikken. Handling er et objekt hvis ansvar er å beskrive hva som skjedde: for eksempel kan en handling som beskriver en bruker som "følger" en annen inneholde en bruker-ID, målbruker-ID og type USER_FOLLOWED_ANOTHER_USER. [27] Butikker, som kan betraktes som maler, kan endres som svar på handlinger mottatt av ekspeditøren.

Denne modellen uttrykkes noen ganger som "egenskapene flyter ned, handlinger flyter opp". Mange implementeringer av Flux har blitt laget siden starten, hvorav kanskje den mest kjente er Redux, som har en enkelt butikk, ofte kalt en enkelt kilde til sannhet (SSOT) . [28]

Fremtidig utvikling

Prosjektstatus kan overvåkes via diskusjonsforumet for kjerneteamet. [29] De viktigste endringene i React går imidlertid gjennom Future of React - repository-problemer og pull-forespørsler . [30] [31] Dette lar React-fellesskapet gi tilbakemelding om potensielle nye funksjoner, eksperimentelle APIer og JavaScript-syntaksforbedringer.

Historie

React ble opprettet av Jordan Walke, en Facebook-programvareingeniør, som opprinnelig kalte det "FaxJS". [32] Det ble påvirket av XHP, et HTML -komponentbibliotek for PHP . Den ble først brukt på Facebooks nyhetsstrøm i 2011 og senere på Instagram i 2012. [33] Den ble utgitt for publikum på JSConf US i mai 2013. [34]

React Native, som muliggjør naturlig utvikling av Android , iOS og UWP med React, ble annonsert på Facebooks React Conf i februar 2015 og utgitt i mars 2015.

18. april 2017 annonserte Facebook React Fiber, en ny kjernealgoritme fra React-biblioteket for å bygge brukergrensesnitt . [35] React Fiber ble designet som et grunnlag for eventuelle fremtidige forbedringer og utviklinger av React-biblioteket. [36]

26. september 2017 ble React 16.0 utgitt for offentligheten. [37]

16. februar 2019 ble React 16.8 utgitt for offentligheten. [38] Utgivelsen introduserte kroker. [39]

Versjoner
Versjon Utgivelsesdato Endringer
0.3.0 29. mai 2013 Første offentlig utgivelse
0.4.0 20. juli 2013 Støtte for kommentarnode <div> {/ * * /} </div>, API for gjengivelse på serversiden er forbedret, React.autoBind fjernet, støtte for støttenøkler, modulforbedringer, feil fikset.
0.5.0 20. oktober 2013 Forbedret minnebruk, støtte for valg og komposisjonshendelser, støtte for getInitialState og getDefaultProps i mixins, lagt til React.version og React.isValidClass, forbedret kompatibilitet for Windows.
0.8.0 20. desember 2013 Lagt til støtte for rader og kolonner, defer og async, loops for <audio> og <video>, autoCorrect-attributter. Lagt til på ContextMenu-hendelser, oppdatert jstransform, esprima-fb og browserify.
0.9.0 20. februar 2014 Lagt til støtte for crossOrigin, nedlasting og hrefLang, mediaGroup og muted, sandbox, sømløs og srcDoc, omfangsattributter. Lagt til hvilken som helst, arrayOf, component, oneOfType, renderable, shape til React.PropTypes, lagt til støtte for onMouseOver og onMouseOut-hendelser, lagt til støtte for onLoad og onError på <img>-elementer.
0.10.0 21. mars 2014 Lagt til støtte for srcSet- og textAnchor-attributter, lagt til oppdateringsfunksjon for uforanderlige data, sjekk at den avsluttende taggen er ekskludert fra alle void-elementer.
0.11.0 17. juli 2014 Forbedret SVG-støtte, normalisert e.view-hendelse, $ application-kommandooppdatering, lagt til støtte for navnerom, lagt til nytt transformWithDetails API, inkluderer forhåndskompilerte pakker under dist /, MyComponent () returnerer nå en deskriptor, i stedet for en forekomst.
0.12.0 21. november 2014 Nye funksjoner lagt til: Spread-operator ({...}) introdusert for å avvikle this.transferPropsTo. Lagt til støtte for acceptCharset, classID, HTML-manifestattributter, React.addons.batchedUpdate lagt til API, @jsx React.DOM er ikke lenger nødvendig. Rettet problemer med CSS-overganger.
0.13.0 10. mars 2015 Utdaterte mønstre rapportert i 0.12 som ikke lenger fungerer, løsningsrekkefølgen for refs har endret seg. Fjernet egenskapene for this._pendingState og this._rootNodeID. Støtte for ES6-klasser, lagt til React.findDOMNode API (komponent), støtte for immutable-js-iteratorer og sekvenser, lagt til ny React.addons.createFragment-funksjonalitet, avviklet React.addons.classSet.
0.14.1 29. oktober 2015 Lagt til støtte for srcLang, standard, typeattributter og fargeattributter, gitt eldre .props-tilgang på DOM-noder, fikset ScryRenderedDOMComponentsWithClass, lagt til react-dom.js.
15.0.0 7. april 2016 Innledende gjengivelse bruker nå document.createElement i stedet for å generere HTML, Ikke flere <span>-tillegg, forbedret SVG-støtte, ReactPerf.getLastMeasurements () er ugjennomsiktig, nye avskrivninger introdusert med en advarsel, fikset flere små minnelekkasjer, React DOM støtter nå sitatet og profil HTML-attributter og CSS-egenskapene cssFloat, gridRow og gridColumn.
15.1.0 20. mai 2016 Rettet en batch-feil, tilbudt tilgang til den siste objekttilordningen, fikset regresjon, fjernet bruken av fletteverktøyet, endret navn på noen moduler.
15.2.0 1. juli 2016 Inkludert komponentstabelinformasjon, fjernet rekvisittvalidering ved monteringstidspunkt, lagt til React.PropTypes.symbol, onLoad-håndtering til <link>, onError-håndtering til <source>-element, API isRunning (), fast ytelsesregresjon.
15.3.0 30. juli 2016 Lagt til React.PureComponent, fikset nestet servergjengivelsesproblem, lagt til xmlns, xmlnsXlink for å støtte SVG og referrerPolicy-attributter til HTML-attributter, oppdatert React Perf-tillegg, fikset ref.
15.3.1 19. august 2016 Forbedret byggeytelse for utvikling, opprydding av interne kroker, oppdaterte fbjs, forbedrede React-oppstartstider, fikset minnelekkasje i servergjengivelse, fikset React Test Renderer, invariant trackedTouchCount på console.error.
15.4.0 16. november 2016 React-pakken og nettleserbygget inkluderer ikke lenger React DOM, forbedret utviklingsytelse, sporadiske testfeil fikset, batchUpdates API-oppdatering, React Perf og ReactTestRenderer.create ().
15.4.1 23. november 2016 Omstrukturert tildeling av variabler, korrekt håndtering av hendelser, korrekt kompatibilitet av nettleserbygget i AMD-miljøer.
15.4.2 6. januar 2017 Rettet byggeproblemer, lagt til manglende pakkeavhengigheter, forbedrede feilmeldinger.
15.5.0 7. april 2017 Lagt til react-dom / test-utils, fjernet peerDependencies, fikset problem med Closure Compiler, lagt til advarsel om avskrivning for React.createClass og React.PropTypes, fikset feil på Chrome.
15.5.4 11. april 2017 Fikset kompatibilitet med Enzyme som eksponerer batchedUpdates på overflaterenderere, oppdatert prop-type versjon, fast react-addons-create-fragment-pakke for å inkludere loose-envify transformation.
15.6.0 13. juni 2017 Lagt til støtte for CSS-variabler i Grid-stilattributter og stilegenskaper, fast AMD-støtte for tillegg basert på react, fjernet unødvendig avhengighet, lagt til advarsel om avskrivning for React.createClass og React fabrikkhjelpere. SUN
16.0.0 26. september 2017 Forbedret feilhåndtering med innføring av "feilgrenser", tillatt passasje til React DOM av ikke-standardattributter, mindre endringer i oppførselen til setState, fjerning av react-con-addons.js, tillegg av React.createClass som create-react -klasse, React.PropTypes som prop-typer, React.DOM som react-dom-fabrikker, endringer i oppførselen til planlegging og livssyklusmetoder.
16.1.0 9. november 2017 Avbryt Bower-utgivelser, fiks en utilsiktet ekstra global variabel i UMD-bygg, fiks onMouseEnter og onMouseLeave-aktivering, fiks <textarea> plceholder, fjern ubrukt kode, legg til manglende avhengighet av package.json, legg til støtte for React DevTools.
16.3.0 29. mars 2018 Lagt til en ny offisielt støttet kontekst API, lagt til ny pakke, fikset uendelig sløyfe ved gjengivelse av portaler med SSR, fikset problem med this.state, fikset problem på IE / Edge.
16.3.1 3. april 2018 Privat API-prefiks, fast ytelsesregresjon og feilhåndtering i utviklingsmodus, lagt til peer-avhengighet, fikset en falsk positiv advarsel på IE11 ved bruk av Fragment.
16.3.2 16. april 2018 Rettet IE-krasj, fikset etiketter i User Timing-målinger, lagt til UMD-bygg, forbedret unstable_observedBits API-ytelse med nesting.
16.4.0 24. mai 2018 Lagt til støtte for Pointer Events-spesifikasjon, lagt til mulighet til å spesifisere propTypes, korrigert lesekontekst, fast støtte for getDerivedStateFromProps (), fikset crash testInstance.parent, lagt til React.unstable_Profiler-komponent for å måle ytelse, endret navn på interne hendelser.
16.5.0 5. september 2018 Lagt til støtte for React DevTools Profiler, diskret feilhåndtering i flere edge-tilfeller, lagt til react-dom / profilering, legg til AuxClick-hendelse for nettleser, lagt til motionX- og motionY-felt til musehendelser, lagt til tangentalPressure- og rotasjonsfelt til pekerhendelsen.
16.6.0 23. oktober 2018 Lagt til støtte for contextType, støtte for innebygde prioritetsnivåer, fortsettelser og tilbakeringinger, forbedret fallback-mekanisme, fast grå overlegg på iOS Safari, lagt til React.lazy () for kodedelingskomponenter.
16.7.0 20. desember 2018 Rettet React.lazy-ytelse for lazy-lastede komponenter, fjernet felt ved avmontering for å unngå minnelekkasjer, fikset feil i SSR, fikset ytelsesregresjon.
16.8.0 6. februar 2019 Lagt til kroker, lagt til ReactTestRenderer.act () og ReactTestUtils.act () for batchoppdateringer, støtte for synkrone elementer sendt til React.lazy (), forbedret lazy useReducer hook initialization API.
16.8.6 27. mars 2019 Rettet feil lagring i useReducer (), fikset iframe-advarsler i Safari DevTools, advarsel om å sette contextType til Context.Consumer i stedet for Context, advarsel om å sette contextType til ugyldige verdier.
16.9.0 9. august 2019 Lagt til <React.Profiler> API for planlagt innsamling av ytelsesmålinger. fjernet unstable_ConcurrentMode til fordel for unstable_createRoot
16.10.0 27. september 2019 Rettet grensetilfelle der en hook-oppdatering ikke ble lagret. heuristisk løsning for å bestemme når den skal hydreres, for ikke å starte den feilaktig under en oppdatering. Fjernet ekstra fiberfelt under avmontering for å spare minne. Feilretting på obligatoriske tekstfelt i Firefox. Object.is-preferanse i stedet for inline polyfill, hvis tilgjengelig. Feilretting ved sammenslåing av suspense og feilhåndtering.
16.10.1 28. september 2019 Rettet regresjon i Next.js-apper som tillater Suspense-mismatch under hydrat for stille prosedyre
16.10.2 3. oktober 2019 Rettet regresjon i react-native-web ved å gjenopprette rekkefølgen på argumenter i hendelsesplugin-uttrekkere
16.11.0 22. oktober 2019 Rettet dobbeltkasting av museinntaster-behandlere inne i nestede React-beholdere. Fjernet unstable_createRoot og unstable_createSyncRoot eksperimentelle APIer. (Disse er tilgjengelige i den eksperimentelle kanalen som createRoot og createSyncRoot.)
16.12.0 14. november 2019 React DOM - Faste passive effekter (useEffect) ikke aktivert i multi-root app.

React Is - Fikset lat- og memotyper som anses som elementer i stedet for komponenter

16.13.0 26. februar 2020 Funksjoner lagt til i React Concurrent-modus. Faste regresjoner i hovedbiblioteket til React og React Dom.

Lisensering

Den første offentlige utgivelsen av React i mai 2013 brukte Apache 2.0-lisensen . I oktober 2014 erstattet React 0.12.0 den med BSD 3-klausul lisensen og la til en separat PATENTS tekstfil som ga samtykke til å bruke Facebook-patenter relatert til programvaren: [40]

Lisensen som er gitt heri vil avsluttes, automatisk og uten varsel, for alle som fremsetter krav (inkludert innlevering av rettslige skritt, påstander eller andre handlinger) knyttet til (a) krenkelse eller direkte, indirekte eller medvirkende tilskyndelse til å krenke et patent: (i ) av Facebook eller noen av dets datterselskaper eller tilknyttede selskaper, uavhengig av om en slik klage er relatert til programvaren eller ikke, (ii) av en part dersom en slik klage oppstår helt eller delvis fra programvare, produkt eller tjeneste fra Facebook eller av dets datterselskaper eller tilknyttede selskaper, uavhengig av om et slikt krav er relatert til programvaren eller (iii) noen part relatert til programvaren; eller (b) at enhver rettighet i et Facebook-patentkrav er ugyldig eller ikke kan håndheves.

Denne ukonvensjonelle klausulen har forårsaket en del kontroverser og debatt i React-brukerfellesskapet, fordi den kan tolkes slik at Facebook kan tilbakekalle lisensen i mange scenarier, for eksempel hvis Facebook saksøker lisensinnehaveren ved å presse på for å ta "andre handlinger" ved å legge ut lisensen handling på en blogg eller andre steder. Mange har uttrykt bekymring for at Facebook kan utnytte oppsigelsesklausulen urettferdig eller at integrering av React i et produkt kan komplisere det fremtidige oppkjøpet av et oppstartsselskap. [41]

Basert på tilbakemeldinger fra samfunnet, oppdaterte Facebook patentbevilgningen i april 2015 for å gjøre den mindre tvetydig og mer ettergivende: [42]

Lisensen som gis deretter vil opphøre, automatisk og uten varsel, hvis du (eller noen av dine datterselskaper, tilknyttede selskaper eller bedriftsagenter) direkte eller indirekte initierer eller tar en direkte økonomisk interesse i en patenterklæring: (i) mot Facebook eller noen av dets datterselskaper eller tilknyttede selskaper, (ii) mot en part dersom slik patenterklæring helt eller delvis stammer fra programvare, teknologi, produkter eller tjenester fra Facebook eller noen av dets datterselskaper eller tilknyttede selskaper, eller (iii) mot noen del relatert til programvaren. [...] En "Patenterklæring" er enhver rettslig handling eller annen handling relatert til direkte, indirekte eller medvirkende krenkelse eller oppfordring til å krenke et patent, inkludert et krav eller motkrav. [43]

Apache Software Foundation har funnet denne lisensavtalen uforenlig med lisensieringsretningslinjene, siden den "overfører risikoen til forbrukere nedstrøms for vår partiske programvare til fordel for lisensgiveren, ikke lisensinnehaveren, og dermed bryter vår juridiske Apache-policy. å være en universell giver "og" er ikke en undergruppe av de i [Apache 2.0 License] og kan ikke lisensieres som [Apache 2.0 License] ". [44] I august 2017 avviste Facebook Apache Foundations bekymringer nedstrøms og nektet å revurdere lisensen deres. [45] [46] Den påfølgende måneden bestemte WordPress seg for å rekonfigurere Gutenberg- og Calypso-prosjektene sine utenfor React. [47]

23. september 2017 kunngjorde Facebook at de ville lisensiere Flow, Jest, React og Immutable.js på nytt med en standard MIT-lisens uken etter ; selskapet hevdet at React var "grunnlaget for et enormt økosystem av åpen kildekode-programvare for nettet" og at de ikke ønsket å "holde tilbake fremgang av ikke-tekniske årsaker." [48]

26. september 2017 ble React 16.0.0 utgitt under MIT-lisensen. [49] Overgangen til MIT-lisensen er også inkludert i 15.x-utgivelseslinjen med React 15.6.2. [50]

Merknader

  1. ^ a b React - Et JavaScript-bibliotek for å bygge brukergrensesnitt , på it.reactjs.org . Hentet 22. mars 2020 .
  2. ^ Paul Krill, React : Making faster, smoother UIs for data-drevne web apps , in InfoWorld , 15. mai 2014. Hentet 22. mars 2020 .
  3. ^ Zef Hemel, Facebooks React JavaScript-brukergrensesnittbibliotek mottar blandede anmeldelser , i InfoQ , 3. juni 2013. Hentet 22. mars 2020 .
  4. ^ Chris Dawson, JavaScript's History and How it Led To ReactJS , i The New Stack , 25. juli 2014. Hentet 22. mars 2020 .
  5. ^ Stanislav, How React Native App Development Works Under the Hood , på MobiDev . Hentet 3. april 2021 .
  6. ^ Jon Samp, React Router to Redux First Router , på Medium , 13. januar 2018. Hentet 22. mars 2020 .
  7. ^ Redux - En forutsigbar tilstandsbeholder for JavaScript-apper. , på redux.js.org . Hentet 22. mars 2020 .
  8. ^ React Router: Declarative Routing for React.js , på reacttraining.com . Hentet 22. mars 2020 .
  9. ^ Komponenter og rekvisitter , på it.reactjs.org . Hentet 22. mars 2020 .
  10. ^ ( NO ) Refs og DOM , på it.reactjs.org . Hentet 22. mars 2020 .
  11. ^ Utkast : JSX- spesifikasjon , på facebook.github.io . Hentet 22. mars 2020 .
  12. ^ Andrew Clark, React v16.0§ Nye gjengivelsesreturtyper: fragmenter og strenger , på React Blog 26. september 2017. Hentet 22. mars 2020 .
  13. ^ Andrew Clark, React v16.0§Støtte for tilpassede DOM-attributter , på React Blog , 26. september 2017. Hentet 22. mars 2020 .
  14. ^ Ludovico Fischer, React for Real: Front-End Code, Untangled , Pragmatic Bookshelf, 6. september 2017, ISBN  9781680504484 .
  15. ^ Pete Hunt , hvorfor bygde vi React? , på React Blog , 5. juni 2013. Hentet 23. mars 2020 .
  16. ^ PayPal Engineering , Isomorphic React Apps with React-Engine , på Medium , 27. april 2015. Hentet 23. mars 2020 .
  17. ^ Netflix teknologiblogg , Netflix Likes React , på Medium , 28. januar 2015. Hentet 23. mars 2020 .
  18. ^ Hooks Overview , på it.reactjs.org . Hentet 23. mars 2020 .
  19. ^ Dillion Megida, hva i helvete er React Hooks? , i Soshace , 16. januar 2020. Hentet 23. mars 2020 .
  20. ^ Bruke Hook Stateit.reactjs.org . Hentet 23. mars 2020 .
  21. ^ Bruke Hook Effect , på it.reactjs.org . Hentet 23. mars 2020 .
  22. ^ ( EN ) Hooks Reference API , på it.reactjs.org . Hentet 23. mars 2020 .
  23. ^ Hooks Rules , på it.reactjs.org . Hentet 23. mars 2020 .
  24. ^ Custom Hooks , på it.reactjs.org . Hentet 23. mars 2020 .
  25. ^ Dybdeoversikt , facebook.github.io/flux . _ _ Hentet 23. mars 2020 .
  26. ^ Introduksjon til Flux- React Exercise , på nicholasjohnson.com . Hentet 23. mars 2020 .
  27. ^ Dan Abramov , The History of React and Flux with Dan Abramov , på Three Devs and a Maybe , 6. november 2015. Hentet 23. mars 2020 .
  28. ^ State Management Tools - Results , on The State of JavaScript . Hentet 23. mars 2020 .
  29. ^ Hvor kan du få støtte , på it.reactjs.org . Hentet 23. mars 2020 .
  30. ^ The Future of React (?) , På GitHub . Hentet 23. mars 2020 .
  31. ^ Problemer med facebook/react , på GitHub . Hentet 23. mars 2020 .
  32. ^ jordwalke / FaxJs: Fax Javascript Ui Framework , på GitHub . Hentet 23. mars 2020 .
  33. ^ Lyd filmTXJS , Pete Hunt | TXJS 2015 , på YouTube , 28. juli 2015. Hentet 23. mars 2020 .
  34. ^ Ferenc Hámori, The History of React.js on a Timeline , i RisingStack , 4. april 2018. Hentet 23. mars 2020 .
  35. ^ Frederic Lardinois, Facebook kunngjør React Fiber, en omskrivning av React-biblioteket , TechCrunch, 18. april 2017. Hentet 19. april 2017 .
  36. ^ React Fiber Architecture , på GitHub . Hentet 23. mars 2020 .
  37. ^ Andrew Clark, React v16.0 , reactjs.org , 26. september 2017. Hentet 23. mars 2020 .
  38. ^ Dan Abramov, React v16.8 : The One With Hooks , på React Blog , 6. februar 2019. Hentet 23. mars 2020 .
  39. ^ Introduksjon til Hooks , på it.reactjs.org . Hentet 23. mars 2020 .
  40. ^ Reager CHANGELOG.md , GitHub . _ Hentet 25. mars 2020 .
  41. ^ Berkana , En overbevisende grunn til ikke å bruke ReactJS ,Medium , 25. mai 2015. Hentet 25. mars 2020 .
  42. ^ Oppdaterer vår åpen kildekode-patentbevilgning , engineering.fb.com , 10. april 2015. Hentet 25. mars 2020 .
  43. ^ Ytterligere tildeling av patentrettigheter versjon 2 , på GitHub . Hentet 25. mars 2020 .
  44. ^ ASF tredjeparts lisenspolicy , på apache.org , Apache Software Foundation . Hentet 25. mars 2020 .
  45. ^ Forklarer Reacts lisens , engineering.fb.com , 18. august 2017. Hentet 25. mars 2020 .
  46. ^ Vurder å lisensiere på nytt til AL v2.0, slik RocksDB nettopp har gjort ,GitHub . Hentet 25. mars 2020 .
  47. ^ Natasha Lomas, WordPress forlater React-biblioteket over Facebook-patentklausulrisiko , i TechCrunch , 15. september 2017. Hentet 25. mars 2020 .
  48. ^ Relicensing React , Jest, Flow og Immutable.js , på engineering.fb.com , 23. september 2017. Hentet 25. mars 2020 .
  49. ^ Andrew Clark, React v16.0§MIT lisensiert ,React Blog , 26. september 2017. Hentet 25. mars 2020 .
  50. ^ Nathan Hunzaker, React v15.6.2 ,React Blog , 25. september 2017. Hentet 25. mars 2020 .

Relaterte elementer

Eksterne lenker