React优化

使用动态import来分割代码

使用动态import来“懒加载”代码,如果你没办法直接减少应用的体积,那么不妨尝试把应用从单个 bundle 拆分成单个 bundle + 多份动态代码的形式。

方法一:使用动态import

import("./math").then(math => {
  console.log(math.add(16, 26));
});

方法二:引用react的高阶组件react-loadable进行动态import

import Loadable from 'react-loadable';
import Loading from './loading-component';

const LoadableComponent = Loadable({
  loader: () => import('./my-component'),
  loading: Loading,
});

export default class App extends React.Component {
  render() {
    return <LoadableComponent/>;
  }
}

shouldComponentUpdate避免重复渲染

我们可以通过根据自己的业务特性,重载shouldComponentUpdate,只在确认真实DOM需要改变时,再返回true。一般的做法是比较组件的props和state是否真的发生变化,如果发生变化则返回true,否则返回false

合理的使用key

在组件发生增删改、排序等操作时,可以根据key值的位置直接调整DOM顺序,告诉React 避免不必要的渲染而避免性能的浪费

合理的拆分和使用组件

合理的拆分组件以提高组件的规范性和复用性。合理的使用类组件和函数组件

合理的传递props

props尽量只传需要的数据,避免多余的更新,尽量避免使用{...props},防止将不需要的属性传递给子组件

在constructor中绑定this

因为在constructor中对函数进行this的绑定只需要绑定一次。

constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this); //构造函数中绑定
}
//然后可以
<p onClick={this.handleClick}>

若在使用时绑定则会每次调用时都要重新绑定

<p onClick={this.handleClick.bind(this)}>

对错误边界的处理

错误边界是一种 React 组件,这种组件可以捕获并打印发生在其子组件树任何位置的 JavaScript 错误,并且,它会渲染出备用 UI,而不是渲染那些崩溃了的子组件树。错误边界在渲染期间、生命周期方法和整个组件树的构造函数中捕获错误。

如果一个 class 组件中定义了 static getDerivedStateFromError()componentDidCatch() 这两个生命周期方法中的任意一个(或两个)时,那么它就变成一个错误边界。当抛出错误后,请使用 static getDerivedStateFromError() 渲染备用 UI ,使用 componentDidCatch() 打印错误信息。

Fragment替代无意义的标签

使用Fragment来替代掉无意义的标签。

原文地址:https://www.cnblogs.com/suihang/p/13818874.html