Great article. One suggestion. I would avoid is typing by using denounce technique like invoke function and if called again with 300 ms cancel. I have implemented with useRef. Like setTimeout to invoke func in 300ms but if called again before then clearTimeout. Better for real app. I think isTyping illustrates your point about the useEffect a little better.