react this.props 进行组件之间的数据传递,此时组件A传递数据给B,但是这时候先显示组件B,this.props是空的,导致页面显示无数据站位图,此时瞬间 this.props有数据了,马上就渲染出数据了,可是这样的页面的闪烁体验很差,如何优化
时间: 2024-03-21 20:40:45 浏览: 88
这种情况下,可以使用 React 提供的生命周期函数来优化页面的渲染效果,避免因为数据延迟导致的页面闪烁。
具体来说,可以在组件 B 中使用 componentDidMount 方法来判断数据是否已经加载完毕,如果数据已经加载完毕,则直接显示数据,否则显示加载动画或者占位符等待数据加载完成。例如:
```
class ComponentB extends React.Component {
constructor(props) {
super(props);
this.state = {
data: null,
isLoading: true
};
}
componentDidMount() {
const { data } = this.props;
if (data) {
this.setState({
data: data,
isLoading: false
});
}
}
componentDidUpdate(prevProps) {
const { data } = this.props;
if (data && prevProps.data !== data) {
this.setState({
data: data,
isLoading: false
});
}
}
render() {
const { data, isLoading } = this.state;
if (isLoading) {
return <LoadingSpinner />;
}
return <DisplayData data={data} />;
}
}
```
在上面的例子中,我们在 componentDidMount 和 componentDidUpdate 方法中判断数据是否已经加载完毕,如果数据已经加载完毕,则直接显示数据,否则显示加载动画或者占位符等待数据加载完成。这样就可以避免因为数据延迟导致的页面闪烁问题。
需要注意的是,在 componentDidUpdate 方法中,需要通过比较 prevProps 和 this.props 来判断数据是否发生变化,避免重复渲染组件。另外,需要在 constructor 中初始化 isLoading 状态为 true,避免在第一次渲染时出现组件渲染两次的问题。
阅读全文