TIL that the recommended way to sync props to state in React is to set the state directly in the render. You Might Not Need an Effect is a great doc. In my exact case, I replaced something like this (which is a hooks violation)

useEffect(() => {
  setInternalValue(defaultValue)
}, [isVisible])

With something like

const previousVisible = usePrevious(isVisible)


if (internalValue !== defaultValue && previousVisible !== isVisible) {
  setInternalValue(defaultValue)
}