gpt4 book ai didi

javascript - Reactjs 渲染两次

转载 作者:行者123 更新时间:2023-12-05 04:02:54 25 4
gpt4 key购买 nike

在我的 reactjs 项目中,组件被渲染了两次。如果我删除 componentDidMount,问题就解决了。但是我的项目中需要它。我尝试了互联网上的解决方案,但我做不到。

App.js

export default class App extends Component {
constructor(props) {
super(props);
this.state = {
users: []
};
}
componentDidMount() {
fetch("https://reqres.in/api/users?page=2")
.then(res => res.json())
.then(result => {
this.setState({
users: result.data
});
});
}

render() {
return (
<BrowserRouter>
<Switch>
<Route exact path="/" render={() => <Home />} />
</Switch>
</BrowserRouter>
);
}
}

首页.js

export default class Home extends Component {
render() {
console.log("Render");
return (
<div>
<h1>console.log render twice</h1>
</div>
);
}
}

https://codesandbox.io/s/wyjk931z6l

console.log 在 Home.js 上运行两次。

最佳答案

您的 App 组件重新呈现,因为您在 componentDidMount 中进行的 API 调用会导致 setState 成功。因此,即使它们的 Prop 没有改变,子组件也会重新渲染。为了避免这种情况,您可以通过扩展 React.PureComponent 来编写子组件,它通过浅比较 props 和 state 实现 shouldComponentUpdate

export default class Home extends PureComponent {
render() {
console.log("Render");
return (
<div>
<h1>console.log render twice</h1>
</div>
);
}
}

Working demo

关于javascript - Reactjs 渲染两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54035701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com