The documentation for useState says (emphasis mine):
If the new value you provide is identical to the current state, as determined by an Object.is comparison, React will skip re-rendering the component and its children. This is an optimization. Although in some cases React may still need to call your component before skipping the children, it shouldn’t affect your code.
It seems most likely that in the case of your component, the React is calling it an extra time. Why? That's an implementation detail.