zoukankan      html  css  js  c++  java
  • React # setState() 的重要性质

    防抖动的UI更新

    如果在很短的时间内重复设置状态,那么UI不会每次都更新,这属于防抖动。
    这说明 setState() 内部有调用时间间隔的检测机制。

    合并状态

    React会合并第一级 state 字段。

    善用异步

    为了确保 setState() 会触发更新,可以善用异步sleep函数,而不是 this.forceUpdate(),这没有效果:

    import * as React from 'react';
    
    async function sleep(n = 1000) {
        return new Promise<void>((resolve, reject) => {
            setTimeout(() => {
                resolve();
            }, n);
        });
    }
    
    export default class extends React.Component {
        state = {
            n: -1,
        }
        ref = React.createRef<HTMLHeadingElement>();
        onClick() {
            (async () => {
                for (var i = 0; i < 1000; i++) {
                    this.setState({
                        n: i
                    });
                    // this.forceUpdate(); // don't effect
                    await sleep(1);
                    console.log(this.ref.current.innerText);
                }
            })();
        }
        render() {
            return (
                <div>
                    <h1 ref={this.ref}>
                        The n is {this.state.n}
                    </h1>
    
                    <button onClick={() => this.onClick()}> 开始 </button>
                </div>
            );
        }
    };
    

    END

  • 相关阅读:
    20170519
    20170515
    20170511
    20170509
    20170505
    使用 FirewallD 构建动态防火墙
    Elasticsearch 5.2.1Cluster 搭建
    elk,centos7,filebeat,elasticsearch-head详细安装步骤
    elk,centos7,filebeat,elasticsearch-head集成搭建
    memcached
  • 原文地址:https://www.cnblogs.com/develon/p/14272828.html
Copyright © 2011-2022 走看看