推荐一个很好的文章,讲解了React的function component与class component最大的一个区别。我来简单的总结一下:
1. 在React中,每一次渲染都是独立的。对于函数组件而言,它在某一次渲染时所能访问到的变量只与那一次的渲染环境有关。因此,如果你执行了异步操作,并且外部更新了props,异步操作最后访问到的是触发异步操作时的环境变量(旧的Props)。
2. props是不变的。因此,组件的每一次渲染访问的props都是不同的。由于类组件是通过this.props的形式来访问props的变量的,props是不变的,可是this.props是变化的,每一次都会指向最新的props。因此,相同情况下,类组件会访问到最新的值。
3. 对于React hooks而言,也会有这个问题。由于每一次渲染都是独立的,因此,如果你在异步操作里访问useState或者传入的props的值,取到的是触发异步操作时的那次渲染的值,而不是最新的。如果想一直访问最新的,可以使用ref的方式或者把异步操作放到useEffect里,将依赖项写在useEffect的第二个参数里。
展开
2