Skip to content

forceUpdate只能穿透当前组件的shouldComponentUpdate(return false),不能穿透孩子的

司徒正美 edited this page Aug 27, 2017 · 1 revision
<!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 src="./test/react.js"></script>
    <script src="./test/react-dom.js"></script> -->
    <script src="./lib/babel.js"></script>
    <script type='text/babel'>
window.onload = function(){
  

    class App extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          aaa: "南京"
        };
      }
      componentWillUpdate(){
          console.log('will update')
      }
      shouldComponentUpdate(){
          console.log('第一层')
        
      }
      render() {
        return (
          <div><A />{this.state.aaa}</div>
        );
      }
    }
    class A extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          aaa: "南京"
        };
      }
      shouldComponentUpdate(){
          console.log('00000')
         return false
      }
      componentWillUpdate(){
          console.log('0000')
      }
      render() {
        return (
          <div><B /></div>
        );
      }
    }

    class B extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          aaa: "南京"
        };
      }
      shouldComponentUpdate(){
         return false
      }
      componentWillUpdate(){
          console.log('1111')
      }
      render() {
        return (
          <div>bbbb</div>
        );
      }
    }
    var div = document.getElementById('example')
    var s = ReactDOM.render(<App />, div)


    setTimeout(function(){
        s.forceUpdate( function(){
            console.log('setTimeout')
        })
    },3000)
  
   
    

}
    </script>
</head>

<body>

    <div>这个默认会被清掉</div>
    <div id='example'></div>


</body>

</html>