Its because your app component is a wrap in StrictMode.
<React.StrictMode>
<App />
</React.StrictMode>,
If you are using
create-react-appthen it is found inindex.js
It is expected that setState updaters will run twice in strict mode in development. This helps ensure the code doesn’t rely on them running a single time (which wouldn’t be the case if an async render was aborted and later restarted). If your setState updaters are pure functions (as they should be) then this shouldn’t affect the logic of your application.
https://github.com/facebook/react/issues/12856#issuecomment-390206425