From Ember to React — Part 2: Top-Level component concerns

Ben Orozco
HealthTree
Published in
2 min readMay 10, 2019

--

In Part 1 of “From Ember to React” series I introduced a pattern to re-use data fetched in a Top-Level component into his children. Then I started to realize that I could make use of this pattern to bring even more ideas from Ember into React! Here are a couple I used lately:

Loading Indicator

Sometimes we want to show a “Loading indicator” to let the users know when a request is being processed. As suggested by this post, logic and markup should be placed on a top-level component to be reused by subsequent components.

As before, I remembered a handy Ember feature called Loading / Error Substates already baked into the framework itself. Turns out our previous “High-order Component & Wrapper”-pattern is a perfect place to replicate this pattern, as we don’t need to repeat the loader in every single component:

This way we can re-use the Loader logic in children components in case we need to hit another remote API:

Error Handling

We can apply a similar pattern for error handling, in this case I would use a generic modal to show potential Network errors:

And you can use it within the children components in similar fashion using a Try..Catch block:

*Update: I found it’s also a good idea to put Error Boundaries logic around here as well

Nothing is perfect…

The downside (no pun intended) to this patterns is that we need to pass down the actions props (showLoader and showErrorModal) to every child component, and if our component tree is deep enough that’d be a tedious and error-prone task, not to mention super verbose!

The solution for this problem in Ember was using an add-on called ember-route-action-helper, which is used to “bubble up” actions to the parent route. This is possible due to the existential difference between Routes and Components in Ember’s object model, but since React is all about Components-only we cannot easily replicate this feature…or can we? 🤔

When Context API?

Most of this pitfalls could potentially be alleviated using the React Context API, but again, I will leave that for another day 😬

References

--

--

Ben Orozco
HealthTree

Maker — Full-stack Developer — Software Engineer