I’d just like to note that A-Frame is not simply a markup abstraction on top of three.js. It also has an extensible entity-component system that allows flexibility to do almost anything. A-Frame hides away the complexity, while still allowing developers to tap into the whole three.js library. It layers on top of three.js rather than completely contain it (like in React) such that developers can use any JS library they want.
Further reading and diagrams: http://ngokevin.com/blog/aframe-vs-3dml/
The issue with react-three is that it is hierarchical in nature and each React component/primitive has narrow fixed behavior. It also has an extreme performance bottleneck by introducing a requestAnimationFrame for each object.
See react-three hierarchy, lacking composability: https://github.com/Izzimach/react-three/blob/master/src/mixins/THREEObject3DMixin.js#L32