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)
}