В моем проекте 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>
);
}
}
Home.js
export default class Home extends Component {
render() {
console.info("Render");
return (
<div>
<h1>console.info render twice</h1>
</div>
);
}
}
https://codesandbox.io/s/wyjk931z6l
console.info работает с Home.js дважды.
Пожалуйста, объясните, почему вы считаете, что компонент, визуализируемый несколько раз, в чем-то плохой. Потому что так работает React (или любое другое программное обеспечение, использующее экран).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Компонент вашего приложения выполняет повторную визуализацию, потому что вызов API, который вы выполняете в componentDidMount, в случае успеха приводит к setState. Из-за этого дочерние компоненты также проходят повторный рендеринг, хотя их свойства не изменились. Чтобы этого избежать, вы можете написать дочерний компонент, расширив React.PureComponent, который реализует shouldComponentUpdate, путем неглубокого сравнения свойств и состояния.
export default class Home extends PureComponent {
render() {
console.info("Render");
return (
<div>
<h1>console.info render twice</h1>
</div>
);
}
}
Хороший ответ, но разве мы не должны выяснить, почему OP считает, что не проблема - это в первую очередь проблема? Я боюсь, что рассказ им о shouldComponentUpdate может спровоцировать плохую практику, которой следует избегать в первую очередь.
@ChrisG да, вы правы, однако я попытался объяснить, что именно происходит в коде OP, и посоветовал использовать PureComponent вместо того, чтобы реализовывать shouldComponentUpdate самостоятельно
Он будет отображаться дважды, так в чем проблема? вот как работает вызов API