Przejdź do treści głównej
Wersja: 0.81

Środowisko JavaScript

Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

Runtime JavaScript​

Podczas korzystania z React Native, Twój kod JavaScript może działać w aż trzech różnych środowiskach:

  • W większości przypadków React Native używa Hermesa, otwartoźródłowego silnika JavaScript zoptymalizowanego pod React Native.

  • Jeśli Hermes jest wyłączony, React Native wykorzysta JavaScriptCore, silnik napędzający Safari. Na iOS JavaScriptCore nie używa JIT z powodu braku pamięci wykonywalnej z możliwością zapisu w aplikacjach.

  • Podczas debugowania w Chrome cały kod JavaScript działa w samej przeglądarce, komunikując się z kodem natywnym przez WebSockety. Chrome używa silnika V8.

Choć te środowiska są bardzo podobne, mogą wystąpić pewne niespójności. Najlepiej unikać polegania na specyficznych cechach dowolnego runtime'u.

Transformatory składni JavaScript​

Transformatory składni ułatwiają pisanie kodu, pozwalając używać nowych konstrukcji JavaScript bez oczekiwania na ich wsparcie we wszystkich interpreterach.

React Native dostarcza kompilator Babel. Szczegóły obsługiwanych transformacji znajdziesz w dokumentacji Babela.

Pełna lista transformacji włączonych w React Native dostępna jest w @react-native/babel-preset.

TransformationCode
ECMAScript 5
Reserved Words
promise.catch(function() {...});
ECMAScript 2015 (ES6)
Arrow functions
<C onPress={() => this.setState({pressed: true})} />
Block scoping
let greeting = 'hi';
Call spread
Math.max(...array);
Classes
class C extends React.Component {render() { return <View />; }}
Computed Properties
const key = 'abc'; const obj = {[key]: 10};
Constants
const answer = 42;
Destructuring
const {isActive, style} = this.props;
for…of
for (var num of [1, 2, 3]) {...};
Function Name
let number = x => x;
Literals
const b = 0b11; const o = 0o7; const u = 'Hello\u{000A}\u{0009}!';
Modules
import React, {Component} from 'react';
Object Concise Method
const obj = {method() { return 10; }};
Object Short Notation
const name = 'vjeux'; const obj = {name};
Parameters
function test(x = 'hello', {a, b}, ...args) {}
Rest Params
function(type, ...args) {};
Shorthand Properties
const o = {a, b, c};
Sticky Regex
const a = /o+/y;
Template Literals
const who = 'world'; const str = `Hello ${who}`;
Unicode Regex
const string = 'foo💩bar'; const match = string.match(/foo(.)bar/u);
ECMAScript 2016 (ES7)
Exponentiation Operator
let x = 10 ** 2;
ECMAScript 2017 (ES8)
Async Functions
async function doStuffAsync() {const foo = await doOtherStuffAsync();};
Function Trailing Comma
function f(a, b, c,) {};
ECMAScript 2018 (ES9)
Object Spread
const extended = {...obj, a: 10};
ECMAScript 2019 (ES10)
Optional Catch Binding
try {throw 0; } catch { doSomethingWhichDoesNotCareAboutTheValueThrown();}
ECMAScript 2020 (ES11)
Dynamic Imports
const package = await import('package'); package.function()
Nullish Coalescing Operator
const foo = object.foo ?? 'default';
Optional Chaining
const name = obj.user?.name;
ECMAScript 2022 (ES13)
Class Fields
class Bork {static a = 'foo'; static b; x = 'bar'; y;}
Stage 1 Proposal
Export Default From
export v from 'mod';
Miscellaneous
Babel Template
template(`const %%importName%% = require(%%source%%);`);
Flow
function foo(x: ?number): string {};
ESM to CJS
export default 42;
JSX
<View style={{color: 'red'}} />
Object Assign
Object.assign(a, b);
React Display Name
const bar = createReactClass({});
TypeScript
function foo(x: {hello: true, target: 'react native!'}): string {};

Polyfille​

Wiele standardowych funkcji jest dostępnych we wszystkich obsługiwanych środowiskach JavaScript.

Przeglądarka​

ECMAScript 2015 (ES6)​

ECMAScript 2016 (ES7)​

ECMAScript 2017 (ES8)​

Specyficzne​

  • __DEV__