The Survival Tips
Runtime errors are a thing. In React 16 you can now at least isolate them with a new componentDidCatch lifecycle method. Use this for major pieces and at least the damage is limited. Log things. Expect the undefined.
Use Flow for type checking. It can do somewhat similar things to Elm, though sadly it is way more verbose and harder to work with. It has pretty good editor integration (set this up). Also try to get this in place early because trying to introduce it to a large existing project is not going to be fun. It works well with React (although the way this works has changed repeatedly).
Keep your dependencies up to date. Things change rapidly and if you fall behind by even a few months you will have some painful catching up to do!
Undefined is not a function