I don't really understand extendState because it seems like somewhat pointless syntactic sugar for:
setState((previousState) => ({...previousState, foo: false}))
setState((previousState) => ({...previousState, foo: false}))
({ contact: { address: "" } })
as opposed to
({ ...prev, contact: { ...prev.contact, address: "" } })
Given the way hooks are structured, if I want to use both `setState` and `extendState` in a `useCallback`, I'd need to pass both to the dependency array, which is just extra effort (which defeats the purpose of the syntactic sugar imo).