是否可以在 React JS 中使用 async/await?

IT技术 reactjs react-native
2021-04-20 17:56:51

我开始使用 React Native 进行编程,并且习惯了使用以下语法:

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

但是我不知道如何在共享包中使其与React JS和React Native兼容。我怎样才能做到这一点,以便它在两个平台上工作?

谢谢!

3个回答

如果您使用 create-react-app 构建,它从 v0.2.3 开始可用

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

它可以在像这样的组件中使用

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>
    );
  }
}

看:

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

nvm 我正在写async somefunction = () => { }而不是somefunction = async () => { }
2021-05-24 17:56:51
谢谢,但它不适用于箭头函数。我使用箭头函数来避免this在构造函数中绑定额外的代码行关于如何使其与箭头函数兼容的任何提示。我正在使用 CRA
2021-05-25 17:56:51
这是一个非常好的提示。我不知道这种构建应用程序的方式。谢谢!
2021-06-06 17:56:51
Tim,异步 componentDidMount 方法的用法是什么?
2021-06-08 17:56:51

React Native 附带了 Babel 和一些 Babel 预设,而 Web 上的 React 只是与 React 相关的代码。

如果你今天想在 web 上使用 async/await,你需要 Babel 和正确的转换:https : //babeljs.io/docs/plugins/transform-async-to-generator/

或 stage-1 预设,这在当今的 React 应用程序中相当普遍。http://babeljs.io/docs/plugins/preset-stage-1/

最后,transform-async-to-generator 对 React 效果很好,感谢@azium
2021-05-30 17:56:51
感谢您的回答@azium。我安装了两个,在运行“npm run dev”后,我收到异步函数的错误“意外令牌”
2021-06-02 17:56:51
你将不得不展示更多关于你的项目的信息来诊断..你能发布你的 package.json 和 webpack.config.js 文件吗?
2021-06-04 17:56:51

或者,您可以使用Typescript

从 2.1 版开始,可以使用async/await并直接转换为 ES5(换句话说,它可以在所有浏览器上运行)