Japp, option is not the ideal way to handle Nulls elegantly, but it is much better than in normal JS and Java.
Well, I mean the most useful use of the Linter is checks that gives syntax errors in Scala. You also gain much my enabling warnings. Else the tools that checks style, best practice etc. are the same as for normal Scala.
Regarding build systems, you are not forced to use Sbt to gather dependencies. In fact if your needs are not basic, it might not work out of the box. You could do it manually, or use npm as some prefer (other than Scala.Js facades, they are best fetched from mvn repositories): https://github.com/chandu0101/scalajs-react-components/blob/master/demo/package.json
Purescript might be interesting, but I haven’t heard about it, so I am unsure how many are using it and if it is production ready. I see there is a React wrapper, so that is a good sign.
The disadvantages over Scala.Js are probably that it requires learning a new language, and it cannot run outside the browser/Node.Js, whereas Scala code can run both on a JVM and a JS engine.