Причина, по которой это происходит, заключается в том, что он повторно отображает массив, который вы используете для ключей, а ключи не в том порядке, в котором они были при первом отображении. Вы можете увидеть это, добавив console.log(state)
непосредственно перед первым возвратом. Safari более строг в этом, чем Chrome или Firefox.
Вы можете исправить это, отсортировав массив перед использованием его для визуализации.
Вы также можете исправить это, изменив функцию переключения на что-то вроде этого:
const handleToggle = ({ target }) => {
const tempState = { ...state };
tempState[target.name] = !tempState[target.name];
setState(tempState);
};