美文网首页大前端虾写前端Gulp前端构建
元芳,Es 5-6-7下的React你怎么看?

元芳,Es 5-6-7下的React你怎么看?

作者: github加星点进来 | 来源:发表于2016-08-18 18:03 被阅读496次

    先来个干货,react 的render 循环数字

    {
      for(var i=0;i<10;i++ ){
     return <div>sssssssss</div>
      }
    }
    

    肯定是不行的

    可以写成

        {
              [...Array(10)].map((item,index) => {
             return <div>sssssssss</div>
                })
              }  
    

    1。React 里面 export 出来的函数arguments.length 一直为0。

    虽然你能回去传进去的值

    //获取非行间样式
    export const getStyle = (obj,attr) => {
      //arguments.length 居然为0
      console.log(arguments.length , obj , attr )
      if(obj.currentStyle){
        return obj.currentStyle[attr];
      }
      else{
        return document.defaultView.getComputedStyle(obj,false)[attr];
      }
    }
    

    2。创建组件

    <code>es5</code>

    var XXXXXX = React.createClass({
    
    //好多钩子
    componentDidMount : function() { },
    
     render: function() { return <a>liu</a> }
    });
    

    <code>es6</code>

    import React , {Component} from 'react';
    
    class Error404 extends Component {
    
      render(){
        return (<div>
          <h3 style={{fontSize : '60px', textAlign : 'center'}}>404 containers</h3>
          </div>)
      }
    
    }
    
    export default Error404
    

    3.getDefaultProps和propTypes

    <code>es5</code>

    //设置默认属性
    getDefaultProps: function() { return {title:'hehe'}; },
    //属性校验器,表示必须是string
    propTypes: { title:React.PropTypes.string, },
    

    <code>es6</code>

    //属性校验器,表示改属性必须是bool,否则报错 
    xxxxxx.propTypes={title: React.PropTypes.bool}
    //设置默认属性
    xxxxxx.defaultProps={title:'hehe'};
    

    <code>es7</code>

    //一个关键字static。和其他语言越来越接近
    static defaultProps(){
      return {
    title : 'hehe'
    }
    

    4.ref 的区别

    例如某个class

    <ul ref='TileTab' className='TileTab' style={{display : 'none'}}>
        <li>1</li>
        <li>2</li>
    </ul>
    

    es5 以前应该是

    //才是element 对象
    React.getDOMNode(this.refs.TileTab) 
    

    es 6 下面是

    直接是element 对象,不需要getDOMNode
    css(this.refs.TileTab,'display',dis)(this.refs.TileText,'border','1px solid rgba(27, 160, 225, 1)');
    

    5.在记下`` 的使用。不记得叫什么,反正能代替''双单引号,在swift 中有个叫法是字符串插值

    //swift 代码
    let name = "liucunzhang"
    let str = "hellow \\(name)"
    

    js 代码

    getLevel(num, str) {
        let b = false;
        let arrs = this.levels.slice(0, num - 1);
        arrs.map(arr => {
          arr.map(strs => {
            if (strs.substring(1, strs.length) === str) {
              b = true;
            }
          })
        })
        //看这里
        return `${!b ? 'on' : ''}${num % 3 === 0 && num < 12 ? ' m40' : ''}`
      }
    

    目前就想到这5个区别!下面在记下React 的事件系统

    React 的事件系统,都是些做过兼容的合成事件

    React 标准化了事件对象,因此在不同的浏览器中都会有相同的属性。

    如下的事件处理器在事件冒泡阶段触发。要在捕获阶段触发某个事件处理器,在事件名字后面追加 Capture
    字符串;例如,使用 onClickCapture
    而不是 onClick
    来在捕获阶段处理点击事件。

    剪贴板事件

    事件名:
    <code>
    onCopy
    onCut
    onPaste</code>

    属性:

    <code>
    DOMDataTransfer
    clipboardData
    </code>

    键盘事件:

    事件名:
    <code>
    onKeyDown
    onKeyPress
    onKeyUp
    </code>

    属性:
    <code>boolean
    altKeyNumber
    charCodeboolean
    ctrlKeyfunction
    getModifierState(key)String
    keyNumber
    keyCodeString
    localeNumber
    locationboolean
    metaKeyboolean
    repeatboolean
    shiftKeyNumber
    which</code>

    焦点事件

    事件名:
    <code>
    onFocus
    onBlur
    </code>

    属性:

    <code>
    DOMEventTarget
    relatedTarget</code>

    表单事件

    事件名:
    <code>
    onChange
    onInput
    onSubmit
    </code>

    鼠标事件

    事件名:
    <code>
    onClick
    onDoubleClick
    onDrag
    onDragEnd
    onDragEnter
    onDragExit
    onDragLeaveonDragOver
    onDragStart
    onDrop
    onMouseDown
    onMouseEnter
    onMouseLeaveonMouseMove
    onMouseOut
    onMouseOver
    onMouseUp
    </code>

    属性:
    <code>
    boolean
    altKeyNumber
    buttonNumber
    buttonsNumber
    clientXNumber
    clientYboolean
    ctrlKeyfunction
    getModifierState(key)boolean
    metaKeyNumber
    pageXNumber
    pageYDOMEventTarget
    relatedTargetNumber
    screenXNumber
    screenYboolean
    shiftKey

    </code>

    触摸事件

    为了使触摸事件生效,在渲染所有组件之前调用React.initializeTouchEvents(true)

    事件名:
    <code>
    onTouchCancel
    onTouchEnd
    onTouchMove
    onTouchStart</code>

    属性:
    <code>boolean
    altKeyDOMTouchList
    changedTouchesboolean
    ctrlKeyfunction
    getModifierState(key)boolean
    metaKeyboolean
    shiftKeyDOMTouchList
    targetTouchesDOMTouchList
    touches</code>

    UI 事件

    事件名:
    <code>onScroll</code>

    属性:
    <code>Number
    detailDOMAbstractView
    view
    </code>

    鼠标滚轮滚动事件

    事件名:
    <code>onWheel</code>

    属性:
    <code>Number
    deltaModeNumber
    deltaXNumber
    deltaYNumber
    deltaZ
    </code>

    好了,就这么多
    END ~~~

    相关文章

      网友评论

        本文标题:元芳,Es 5-6-7下的React你怎么看?

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