zoukankan      html  css  js  c++  java
  • React 长列表修改时避免全体渲染

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8" />
        <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
        <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
        <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    </head>
    
    <body>
    
        <div id="example"></div>
        <script type="text/babel">
            class Parent extends React.Component {
                constructor() {
                    super();
                    var list = []
                    list.length = 1000
                    list.fill(1)
                    this.state = {
                        list: list.map((e, i) => i)
                    }
                }
                onChange = (value, index) => {
                    const list = [...this.state.list]
                    list[index] = value
                    this.setState({list})
                }
                add = index => {
                    const list = [...this.state.list]
                    list.splice(index, 0, list.length + 1)
                    this.setState({
                        list
                    })
                }
                render() {
                    return this.state.list.map((e, i) => (
                            <Input 
    							add={this.add}
                        		onChange={this.onChange} 
    							key={i} 
    							e={e} 
    							i={i} 
    							list={this.props.list} />
                        ))
                }
            }
    
            class Input extends React.Component {
                componentDidUpdate() {
                    console.log(1)
                }
    
                shouldComponentUpdate(nextProps, nextState) {
                    return nextProps.e !== this.props.e
                }
    
                render() {
                    return (
                        <input value={this.props.e} onChange={e => this.props.onChange(e.target.value, this.props.i)} onKeyDown={(e) => e.key === 'Enter' && this.props.add(this.props.i)} />
                    )
                }
            }
            
            ReactDOM.render(
                <Parent />,
                document.getElementById('example')
            );
        </script>
    
    </body>
    
    </html>
    
  • 相关阅读:
    红黑树——以无厚入有间
    红黑树——依天理以神遇
    B-树 分合之道
    B-树 动机与结构
    云心出岫——Splay Tree
    双散列和再散列暨散列表总结
    开放定址法——平方探测(Quadratic Probing)
    [LeetCode 109]
    [LeetCode 110]
    [LeetCode 111]
  • 原文地址:https://www.cnblogs.com/NKnife/p/11346555.html
Copyright © 2011-2022 走看看