Est-il possible d'utiliser async / await dans React JS?

J'ai commencé à programmer en React Native, et je me suis habitué à utiliser la syntaxe:

async myFunction(){
    ...
    return await otherFunction();
}

Mais je ne sais pas comment le rendre compatible avec React JS et React Native dans un paquet partagé. Comment puis-je accomplir cela pour que cela fonctionne sur les deux plates-formes?

Merci!

28
demandé sur Julian 2016-07-13 19:35:59

3 réponses

React natif est livré avec Babel et certains presets Babel, alors que React sur le web est juste un code lié à React.

Si vous voulez utiliser async/await sur le web aujourd'hui, vous aurez besoin de Babel et des transformations correctes: https://babeljs.io/docs/plugins/transform-async-to-generator/

Ou les préréglages stage-1, ce qui est assez courant dans les applications React aujourd'hui. http://babeljs.io/docs/plugins/preset-stage-1/

17
répondu azium 2016-07-13 16:47:24

Si vous construisez en utilisant create-react-app, il est disponible depuis v0.2. 3

Https://github.com/facebookincubator/create-react-app/releases/tag/v0.2.3

Il peut être utilisé dans un composant comme celui-ci

class App extends Component {
  constructor(props) {
    super(props);
    this.state = { message: '' };
  }

  async componentDidMount() {
    this.setState({ message: 'loading...' });
    let d = await getData('/posts/1');
    this.setState({ message: d });
  }

  render() {
    let { message } = this.state;
    return (
      <div className="App">
        <p className="App-intro">
          { message }
        </p>
      </div>
    );
  }
}

Voir:

Https://github.com/facebookincubator/create-react-app/issues/1024

37
répondu Tim Arney 2017-03-06 19:08:51

Alternativement, vous pouvez utiliser Tapuscrit.

Depuis la version 2.1, il est possible d'utiliser async/await et directement transpile à ES5 (en d'autres mots le sur ~tous les navigateurs)

2
répondu Bruno Grieder 2017-03-06 14:23:16