I have been using figwheel-main for React Native development for a long time (since 2016 or so) and I'm generally very happy with it.
As of last year, the npm package support is also really flawless. You can "yarn add @tensorflow/tfjs". Then simply add a require like:
["@tensorflow/tfjs" :as tfjs]
... and everything just works (At least on React Native + CLJS. I haven't done a browser-based CLJS project recently but I assume it should be the same).
React Native uses its own bundler (called metro) which you MUST use AFAICT, so on React Native you don't get to avoid using an extra tool. One tip I would give in this regard is: if you are to use JavaScript packages, use "yarn" instead of "npm". This should be applicable for both browser and React Native development. Over the years I have had qualitatively superior experience with yarn. There has been many half days lost only to realize via an obscure google search that it was some weird npm-specific problem. Can't recall any significant problems because of yarn.
I haven't used shadow-cljs myself but thheller is constantly a super helpful and knowledgeable participant in the Clojure community. So I assume the quality of the tool is also excellent, and I have also heard good things from people who use shadow-cljs.