const firstMountValue = useRef(value).current;
useEffect(() => {..... firstMountValue ...}, [firstMountValue]);
в экшен SET_RND_NUM не передавать рандомное число, перенеся эту логику в редьюсер. Да, редьюсер перестанет быть "чистой функцией", но невелика потеря.
Переносим соответствующий вызов dispatch из обработчика клика в эффектсвятые отцы не рекомендуют так делать - https://beta.reactjs.org/learn/you-might-not-need-...
Долго учить typescript?