It really depends on your use case. I am using React, etch and vanilla DOM in linter and linter-ui-default. All of them have some use cases they are justified for, for example I need React’s efficient re-rendering to support thousands of messages at once in the panel (number of messages * ~10 DOM elements), I need etch for atom-select-list (allows you to add a command pallete-like view) and raw DOM where the other two are overkill.
Etch is super-lightweight in terms of performance and overhead compared to React. I am not sure about etch’s re-render performance with thousands of items tho. Etch is the one I’ll recommend you for general purpose views, but if you really need performance in some parts, React might be what you want to use.
Furthermore, you can read the Atom bug that sparked a debate on this topic: https://github.com/atom/atom/issues/5756