We have been busily re-building our core property listings experience using ReactJS for a while now. After the release of our revamped sold property section, we decided to find a way to engage the other areas of the company and give back to the local tech community.
With that in mind, REA Group is very excited to announce that on the 8th – 10th February 2017 we will be hosting a ReactJS workshop run by the amazing React Training team. React Training is a US based group comprised of ReactJS experts and the creators of some of the most popular open source libraries in the space, many of which we use here.
I have recently been on a Higher Order Component (HOC) craze. HOCs are a good tool for implementing cross-cutting concerns or common functionalities, such as logging and tracking. For more information on HOCs, check out this recent post by my colleague Mehdi Mollaverdi!
Then I discovered Functions as Child Components (FaCC) and a couple of my brain cells perished. FaCC’s are components that receive a function as their child. For example:
So let’s take a trip through struggle town.
After making our journey from Flux to Redux, we were happy with how clean and simple our state management had become so we kept ticking along.
A Little Bit of Background
During this project, we came across a few different use cases for some cross-cutting concerns, such as page load tracking, toggling new features on and off, and desktop/mobile toggling. We wanted to implement these in a generic and reusable way to avoid code duplication. For example, we had different pages (routes) in our application, and wanted to track user visits to those pages, but didn't want to duplicate this tracking code for every route.
We initially used React mixins for some of these problem, but ended up replacing it with higher-order components. In this blog post, I'll first provide a brief introduction to higher-order components (HOCs), and will then go through our journey for each use case and will explain each of the aforementioned techniques (mixins and higher-order component) in more details.