Точно такой же паттерн работы с обычным useState в реакте.
Именно по причине того что ожидается что разработчик будет в юзстейте хранить примитивы и не стали имплементить shallow merge, как было в class based components
Ну и тем не менее, в описании к useState как раз таки и есть оговорка, что лучше хранить примитивы. Мне кажется, тут она бы тоже лишней не была.