preact的异步渲染

preact的性能听说是很快,这在于一个作弊机制,它需要更多时间才走完官方React 或 anu的任务。

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">   
    
    <script type='text/javascript' src="./test/preact.js"></script>
 
     <script type='text/javascript' src="./lib/babel.js"></script>
  
</head>
<body>
    
        <div>开发者工具</div>
        <pre>
            
        </pre>
        <div id='example'></div>
    
      
  <script type='text/babel'>
   /** @jsx preact.h */
     
      var container = document.getElementById("example")
      var div = container
      if(window.preact){
          window.React = window.preact
      }
     // var PropTypes = React.PropTypes
      if(!window.ReactDOM){
        window.ReactDOM = window.React
      }
      var PropTypes = React.PropTypes
      var expect = function(a) {
          return {
              toBe: function(b) {
                  console.log(a, b, a === b)
              }
          }
      }
      var s 
      class A extends React.Component{
        constructor(props){
            super(props)
            s = this
            this.state = {
                a: 111
            }
        }
        componentDidMount(){
              console.log("did mount");
        }
        componentDidUpdate(){
              console.log("did update");
        }
        render(){
            return <span>{this.state.a}</span>;
        }
      }
       ReactDOM.render(<A />, div)
       console.log(div.innerHTML)
      s.setState({a: 666})
      console.log(div.innerHTML)
      setTimeout(function(){
          console.log(div.innerHTML)
      },0)
    </script>
  
</body>
    
 </html>

注意,preact的对于组件虚拟DOM不会返回组件实例,需要hack一下。输出如下:

clipboard.png

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">       
    <script type='text/javascript' src="./dist/React.js"></script>
    <script type='text/javascript' src="./lib/babel.js"></script>
  
</head>
<body>
    
        <div>开发者工具</div>
        <pre>
            
        </pre>
        <div id='example'></div>
    
      
  <script type='text/babel'>
  
     
      var container = document.getElementById("example")
      var div = container
      if(window.preact){
          window.React = window.preact
      }
     // var PropTypes = React.PropTypes
      if(!window.ReactDOM){
        window.ReactDOM = window.React
      }
      var PropTypes = React.PropTypes
      var expect = function(a) {
          return {
              toBe: function(b) {
                  console.log(a, b, a === b)
              }
          }
      }
      class A extends React.Component{
        constructor(props){
            super(props)
            this.state = {
                a: 111
            }
        }
        componentDidMount(){
              console.log("did mount", div.innerHTML);
        }
        componentDidUpdate(){
              console.log("did update", div.innerHTML);
        }
        render(){
            return <span>{this.state.a}</span>;
        }
      }
      var s = ReactDOM.render(<A />, div)
      console.log(div.innerHTML)
      s.setState({a: 666})
      console.log(div.innerHTML)
      setTimeout(function(){
          console.log(div.innerHTML)
      },0)
    </script>
  
</body>
    
 </html>

clipboard.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值