美文网首页
我只想知道写react组件,不想学习webpack,等那些构建工

我只想知道写react组件,不想学习webpack,等那些构建工

作者: Miss____Du | 来源:发表于2016-12-04 19:27 被阅读287次

最近公司在做一个建站的项目, 项目中组件化的部分使用了react,并通过browserify(也可以使用webpack,gulp, grunt……)构建工具,配合babel 对jsx进行ES6转义。
我感觉自从我做前端一来,前端的轮子越来越多,越来越大,想写个hello world ,有时候都需要经过步骤1,2,3,4,在我研究webpack时, 最感同身受的一句话就是“前端圈需要有个配置工程师,专门研究各种工具的使用文档”,我自己老早就想写这一篇文章,虽然内容并不会太深,只是想对最近一个月工作的一个总结,并希望通过总结找到我还遗漏了哪些地方,今天韩语老师身体不舒服,可以有时间写一篇。


我每次在家(笔记本没有工作环境)时,想写react 总觉得需要准备的环境很多, 我想用react 但是我想用es6去写react,觉得需要准备很多,于是,我就找了找,如何不需要构建工具,直接在浏览器端就直接运行 然后 编译es6代码, 虽然 在浏览器端编译会慢一些,但是只是为练习写组件,尝试react编写,暂时就够了。。

关于react的几个方向
  • react构成

    • react
      我现在工作内容很简单,使用react&react-dom就好,主要是进行组件的编写。包含api:React.createElement .createClass .Component .PropTypes .Children
      使用方法
      import { Component } from 'react'
      import { render } from 'react-dom';
      class Audio extends Component{
      render(){
      return(<div>3333</div>)
      }
      }
      export default Audio
      render(<Audio />, document.getElementById('app'))
      我开始接触react时,就已经在用es6,去写,所以关于其他的写法,没有进行过复习。
  • react-dom
    主要负责将我们编写的组件渲染到dom中,提供的api:ReactDOM.render .unmountComponentAtNode .findDOMNode

  • react-dom-server
    负责进行服务端渲染,将渲染dom的过程留在服务端,减少浏览器端的渲染成本,包含api:.renderToString 和 .renderToStaticMarkup

  • react-with-addons
    与react数据流相关,react本身是单向数据绑定,不同于angular,vue, 但是提供了这个包,来使得开发者对数据进行额外的操作,具体不了解,没用过。

    React Native
    没用过,看网上的文章 应该是为了让同一套代码运行在多个平台,而提供的一门技术,与之相比较的可以用最近半年比较火的 weex, 基于vue的。

  • ES6 with Babel

  • es6
    es6 提供了很多比较简化代码的方法,最喜欢用的像模块化,结构赋值, 数组填充,对象拷贝,如果有深度拷贝就更好了。关于模块化,这个 需要对比我们常用的模块化规范说一下

CommonJS 服务端(node)的模块加载规范,是同步的,因为在本地目录加载文件,速度很快不需要异步
AMD与CMD是浏览器端的两个模块加载规范,是异步的,两个再具体实现也是有差别的。关于模块加载是什么鬼,可以看一下我之前自己写的一个AMD模块加载的代码,,,
但是 这三者有一个共同点:都只能在运行时确定模块的具体内容。只有浏览器运行时,通过加载某个文件即模块,来获得这个对象。
由于es6的模块化写法,则是在编译时加载,我已开始有个疑问,js代码不是不需要编译么,问过同事,给的合理的解释 就是,是浏览器对es6代码进行进行的编译,同理 浏览器也会对es5代码进行编译。ES6模块不是对象,而是通过export命令显式指定输出的代码,这在一定程度上解决了之前循环加载的问题,但是 es6 对除去对象的循环加载输出并不是像期待的那样,参考

原本ES6模块化的引入,原本是弥补浏览器端缺失的模块加载这个功能,但是由于浏览器或者服务端 貌似都没有想好怎么支持这个,所以就到了babel出场了。

  • babel
    这个是这一年多与webpack 结合比较火的工具,babel以转化es6代码闻名,后来又不甘心只做这一件事,于是就有了babel5.0 到6.0的故事
    babel 与之前的react 类似,都是 由一个大而全的包,拆成了许许多多独立的小包,优点是 我们用的时候 捡那些需要用的用,不需要的就不引用,缺点是,以前引用一个就够了,现在 不知道引用哪一个,呵呵哒
    ·还有一个需要注意的从Babel 6.0开始,不再直接提供浏览器版本,而是要用构建工具构建出来。如果你没有或不想使用构建工具,可以通过安装5.x版本的babel-core模块获取· cdn地址6.0以后的无法使用
    例如
    <html>
    <head>
    <title>react入门知识</title>
    <meta name="content" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <script src="http://cdn.bootcss.com/babel-core/5.8.23/browser.min.js"></script>
    </head>
    <body>
    <script type="text/babel">
    class Test {
    test() {
    var ss = new Array(2).fill(3)
    console.log(ss)
    }
    }
    var test = new Test;
    test.test();
    </script>
    </body>
    </html>
    在script标签的type属性是“text/babel”需要注意,这样我们就可以 写es6的代码了。

    Paste_Image.png
    注意到这里还有一个polyfill, babel再做转化时,Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,阮一峰大神这样解释道,像箭头函数,结构赋值 这都是新的句法 但是像Array.from这个只是array类的一个新的api 所以会被忽略,这时候,我们还需要额外引用polyfill,记住测试的时候,在手机端测试效果比较明显,因为 pc端的chrom支持的差不多了,所以你看不出效果
    关于babel的那些包怎么使用,怎么权重,我其实今天也看了许多文章,可以总结一些,但是我现在困了,不想写了,有时间再补上。其实我觉得阮一峰大神的这篇文章就已经说的很明白了
  • 快速用react写组件
    终于切入正题

      <html>
          <head>
              <title>react入门知识</title>
              <meta name="content" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
              <script src="http://cdn.bootcss.com/babel-core/5.8.23/browser.min.js"></script>
              <script src="//cdn.bootcss.com/react/15.4.1/react.js"></script>
              <script src="//cdn.bootcss.com/react/15.4.1/react-dom.js"></script>
              </head>
          <body>
              <div id="app">
    
              </div>
              <script type="text/babel">
                  var { render } = ReactDOM
                      ,{ Component } = React
                  class App extends Component{
                      render(){
                          return ( <div>hello,world</div> )
                      }
                  }
                  render(
                      <App/>,
                      document.getElementById('app')
                    );
              </script>
          </body>
      </html>
    

关于webpack是一个大坑,我每次研究他一下午就过去了,这个也需要写一篇笔记,但是最近工作一直再用react 加上 我现在工作上并不需要用,所以就先暂缓,接下来 就是react组件上一些注意的地方,改天再写吧。
我已经好久好久没有写过笔记了。对前端的热衷远不及我微博加的那些大神,就让我安静的做个切图工程师

我穿的珠子有没有很好看

相关文章

网友评论

      本文标题:我只想知道写react组件,不想学习webpack,等那些构建工

      本文链接:https://www.haomeiwen.com/subject/nqwhmttx.html