浏览器直接运行react

平时想写一个简单的react demo,需要使用create-react-app来初始一个项目,或者使用其他脚手架初始项目,属实有些小题大做;而使用vue的时候,新建一个html文件,然后外链vue包文件,立马就能像使用jquery一样开始写vue组件,非常的方便;

那么是否可以在html中直接引用react.js,然后写demo呢? 答案是可以的。

vue 组件中的template部分能够直接在html中运行使用,其原因是vue官方提供模板编译功能,按照文档,只要选择完整版的vue版本,就可以直接在浏览器中允许了。

对比之下浏览器不能运行jsx,react包内部也没有提供编译器; 好在babell和babel插件处理提供了这样的工具,所以问题就变成了如何在浏览器端运行babel;babel的官方文档提供了在线使用playground, 看看它是怎么做到的,直接参照来就行了。

通过查看network发现了这个js文件https://unpkg.com/@babel/standalone@7.17.11/babel.min.js, 看名字就能猜到正是我们需要的,接下来就是看怎么用了。

在babel官网查到使用文档 https://babeljs.io/docs/en/babel-standalone, 看起来蛮简单,于是就有了下面的代码,在html文件中直接运行

<div id="root"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/16.11.0/umd/react.production.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/16.11.0/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone@7.18.4/babel.min.js"></script>
<script type="text/babel">
  class App extends React.Component {
    constructor() {
      super()
      this.state = {
        num:1
      }
    }
    add=()=> {
      this.setState({
        num: this.state.num + 1
      })
    }
    render() {
      return <button onClick={this.add}  >
        {this.state.num}
      </button>
    }
  }
  window.onload = function () {
    ReactDOM.render(<App />, document.querySelector('#root'))
  }
</script>

需要注意到script中的 type="text/babel"是为了给babel使用的,所以不能省略。

最后在浏览器的截图如下:

posted @ 2022-05-06 11:34  空山与新雨  阅读(765)  评论(0编辑  收藏  举报