Skip to content

多层更新

司徒正美 edited this page Oct 1, 2017 · 2 revisions
<!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="./lib/ReactTestUtils.js"></script>

    <script src="./test/babel.js"></script>
   

</head>
<body>

    <div>开发者工具</div>
    <div id='example'></div>
    <script type='text/babel'>
        var expect = function(a) {
            return {
                toBe: function(b) {
                    console.log(a, b, a === b)
                }
            }
        }
          class Parent extends React.Component {
            constructor(props) {
                super(props);
                this.state = {
                    a: 1
                };
            }
            render() {
                console.log("Parent render")
                return <Child />;
            }
        }
       
        class Child extends React.Component {
            constructor(props) {
                super(props);
                this.uuid = new Date - 0
                this.state = {
                    a: 888
                };
            }
            shouldComponentUpdate() {
                return false;
            }
            render() {
                console.log("Child render")
                return <GrandChild />
            }
        }
        class GrandChild extends React.Component {
          
           
            render() {
                console.log("GrandChild render")
                return <div><span>{new Date() - 0}</span><b>1111</b></div>;
            }
        }
        var container = document.getElementById('example')
        var s = ReactDOM.render(<Parent />, container);
            s.setState({a:2})
            console.log(s)
        
        </script>
</body>

</html>

更新

<!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="./lib/ReactTestUtils.js"></script>

    <script src="./test/babel.js"></script>
   

</head>
<body>

    <div>开发者工具</div>
    <div id='example'></div>
    <script type='text/babel'>
        var expect = function(a) {
            return {
                toBe: function(b) {
                    console.log(a, b, a === b)
                }
            }
        }
          class Parent extends React.Component {
            constructor(props) {
                super(props);
                this.state = {
                    a: 1
                };
            }
            render() {
                console.log("Parent render")
                return <Child a={this.state.a} />;
            }
        }
       
        class Child extends React.Component {
            constructor(props) {
                super(props);
                this.uuid = new Date - 0
                console.log(props)
                this.state = {
                    a: props.a
                };
            }
            componentWillReceiveProps(props){
                 this.state.a = props.a
            }
            render() {
                console.log("Child render",this.state.a)
                return this.state.a ? <GrandChild />: <Another/>
            }
        }
        class Another extends React.Component {
            render() {
                console.log("Another render")
                return <em>Another</em>;
            }
        }
        class GrandChild extends React.Component {
          
           
            render() {
                console.log("GrandChild render")
                return <div><span>{new Date() - 0}</span><b>1111</b></div>;
            }
        }
        var container = document.getElementById('example')
        var s = ReactDOM.render(<Parent />, container);
            console.log("==============")
            s.setState({a:0})
            console.log(s)
          
       
        </script>
</body>

</html>