react组件渲染两次问题如何解决

这篇文章主要介绍“react组件渲染两次问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react组件渲染两次问题如何解决”文章能帮助大家解决问题。

react组件渲染两次

可能会有人问,问什么我的组件明明是就让渲染一次,但是实际上却渲染两次呢?其实我也遇到了这个问题,那么下面我提出一种解决这个问题的一种方法。

如果你使用了react-router低于4.x版本中的hashHistory,那么问题就来了,出现这种情况的原因是因为router中进行了一次push和一次pop,所以出现两次渲染,

你只需要在shouldComponentUpdate()这个生命周期钩子中做一个判断就好了:

return (this.props.router.location.action === 'PUSH')

或者

return (this.props.router.location.action === 'POP');

只要二选一即可解决渲染两次的问题。 

react总结之避免不必要的重复渲染

类组件PureComponent

适当的使用PureComponent创建组件可以提高性能,在使用类组件的时侯,继承PureComponent组件,它是依赖于传递给组件的props进行浅比较,当props发生改变的时候,才会重新渲染组件,既然是浅比较,那么在state和props每次都发生改变的额时候,还要使用PureComponent就会对性能产生负面的影响了!

  • React.memo()

React.memo()和PureComponent很相似,PureComponent是一个类,React.memo()是一个函数组件,它有两个参数,第一个参数是纯函数的组件,第二个参数是true或者false,用于控制是否刷新组件!

  • shouldComponmentUpdate

类组件的的生命周期函数,当返回值是false的时候,视图不做更新,否则更新!

使用插件seamless-immutable

1.引入import Immutable from 'seamless-immutable';

2.初始化state

    this.state = {
                    list: Immutable([]);
    }

3.修改state

    this.setState({
                list: Immutable(items);
    })

使用插件pure-render-decorator

import React from 'react';
import pureRender from 'pure-render-decorator';
// es7才支持装饰器,这边需要配置babel
@pureRender
class List extends React.Component {
  render() {
    const {list} = this.props;
    return (
      <>
        {
          list.map((item) => {
            return (
              <div key={item.id}>
                <div>{item.code}</div>
              </div>
            );
          })
        }
      </>
    );
  }
}
export default List;

关于“react组件渲染两次问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注蜗牛博客行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论电报频道链接