Skip to content

Ambiente JavaScript

Tempo de execução JavaScript

Ao usar React Native, você executará seu código JavaScript em até três ambientes:

  • Na maioria dos casos, o React Native usará o Hermes, um mecanismo JavaScript de código aberto otimizado para o React Native.
  • Se o Hermes estiver desativado, o React Native usará JavaScriptCore, o mecanismo JavaScript que alimenta o Safari. Observe que no iOS, JavaScriptCore não usa JIT devido à ausência de memória executável gravável em aplicativos iOS.
  • Ao usar a depuração do Chrome, todo o código JavaScript é executado no próprio Chrome, comunicando-se com o código nativo por meio de WebSockets. O Chrome usa V8 como mecanismo JavaScript.

Embora esses ambientes sejam muito semelhantes, você pode acabar encontrando algumas inconsistências. É melhor evitar depender de especificações de qualquer tempo de execução.

Transformadores de sintaxe JavaScript

Os transformadores de sintaxe tornam a escrita de código mais agradável, permitindo que você use a nova sintaxe JavaScript sem ter que esperar pelo suporte de todos os interpretadores.

O React Native vem com o compilador Babel JavaScript. Verifique a documentação do Babel sobre suas transformações suportadas para obter mais detalhes.

Uma lista completa das transformações habilitadas para React Native pode ser encontrada em @react-native/babel-preset.

TRANSFORMAÇÃOCÓDIGO
ECMAScript 5
Palavras reservadaspromise.catch(function() {...});
Arrow functions<C onPress={() => this.setState({pressed: true})} />
Block scopinglet greeting = 'hi';
Call spreadMath.max(...array);
Classesclass C extends React.Component { render() { return <View />; } }
Computed Propertiesconst key = 'abc'; const obj = {[key]: 10};
Constantsconst answer = 42;
Destructuringconst {isActive, style} = this.props;
for…offor (var num of [1, 2, 3]) {...};
Function Namelet number = x => x;
Literalsconst b = 0b11; const o = 0o7; const u = 'Hello\u{000A}\u{0009}!';
Modulesimport React, {Component} from 'react';
Object Concise Methodconst obj = {method() { return 10; }};
Object Short Notationconst name = 'vjeux'; const obj = {name};
Parametersfunction test(x = 'hello', {a, b}, ...args) {}
Rest Paramsfunction(type, ...args) {};
Shorthand Propertiesconst o = {a, b, c};
Sticky Regexconst a = /o+/y;
Template Literalsconst who = 'world'; const str = Hello ${who};
Unicode Regexconst string = 'foo💩bar'; const match = string.match(/foo(.)bar/u);
ECMAScript 2016 (ES7)
Exponentiation Operatorlet x = 10 ** 2;
ECMAScript 2017 (ES8)
Async Functionsasync function doStuffAsync() {const foo = await doOtherStuffAsync();};
Function Trailing Commafunction f(a, b, c,) {};
ECMAScript 2018 (ES9)
Object Spreadconst extended = {...obj, a: 10};
ECMAScript 2019 (ES10)
Optional Catch Bindingtry {throw 0; } catch { doSomethingWhichDoesNotCareAboutTheValueThrown();}
ECMAScript 2020 (ES11)
Dynamic Importsconst package = await import('package'); package.function()
Nullish Coalescing Operatorconst foo = object.foo ?? 'default';
Optional Chainingconst name = obj.user?.name;
ECMAScript 2022 (ES13)
Class Fieldsclass Bork {static a = 'foo'; static b; x = 'bar'; y;}
Proposta da etapa 1
Export Default Fromexport v from 'mod';
Diversos
Babel Templatetemplate(const %%importName%% = require(%%source%%););
Flowfunction foo(x: ?number): string {};
ESM to CJSexport default 42;
JSX<View style={{color: 'red'}} />
Object AssignObject.assign(a, b);
React Display Nameconst bar = createReactClass({});
TypeScriptfunction foo(x: {hello: true, target: 'react native!'}): string {};

Polifills

Muitas funções padrão também estão disponíveis em todos os tempos de execução JavaScript suportados.

ECMAScript 2015 (ES6)

ECMAScript 2016 (ES7)

ECMAScript 2017 (ES8)

Específico

  • __DEV__