useEffect(() => {
socket.on('getPrevMessages', data => {
setPrevMessages(prev => [...prev, ...data]);
});
}, [])
А для чего в вашем примере использование useCallback? Не излишне?
Там было 2 кнопки которые увеличивают и уменьшают число. Типичная минипрограммка, что бы понять как что и откуда берет redux.
Глобальный объект window существует весь рантайм от запуска программы до ее завершения.
Рассмотрим рамку, которая не проходит через сторону выпуклой оболочки. На рисунке синии линии соединяют точки касания.
С первой картинкой всё просто - если повернуть рамку по часовой стрелке, то уменьшатся и высота и ширина. То есть это явно не минимум.
Вторая рамка хитрее - там при повороте одно растет, другое уменьшается, и что с площадью, не сразу понятно.
Высота рамки равна H, ширина W.
Допустим, при повороте рамки на очень маленький угол A против часовой стрелки высота уменьшилась на h1, ширина увеличилась на w1, площадь при этом уменьшилась на s1 = (W*h1 - H*w1 + h1*w1). Если ещё раз повернуть на угол А, то легко можно показать, что w2 < w1, h2 > h1, и новое уменьшение s2 будет ещё больше, чем s1. То есть чем дальше крутим, тем выгоднее, и так до касания одной из сторон оболочки.
Теперь допустим, что у нас изначально была минимальная рамка, и поворот на угол А в любом направлении увеличивает площадь. Тогда повернем на А по часовой стрелке, увеличив площадь. Теперь если обратно повернуть на А против часовой, площадь уменьшится, но по доказанному ранее, тогда ещё один поворот против часовой должен ещё уменьшить площадь.
Таким образом, минимальная рамка не может проходить только через точки.