The drawback of Angular’s two-way data binding approach is its negative impact on performance. Angular automatically creates a watcher for each binding. During development, we may come to a point when an app is packed with too many watchers for bound elements.
React uses one-way data binding, meaning we are able to direct the flow of data only in one direction. Because of this, it’s always clear where the data was changed. It’s worth noting that two-way data binding was available in ReactJS before v15 thanks to ReactLink.
In order to implement a unidirectional data flow in React, Facebook created its own application architecture called Flux. Flux controls the flow of data to ReactJS components through one control point – the dispatcher. Flux’s dispatcher receives an object (they call it an action) and transfers it to an appropriate store, which then updates itself. Once the update is finished, the View changes accordingly and sends a new action to the dispatcher. It’s only possible to transfer an action to the store when it’s fully updated. With this concept, Flux improves the effectiveness of the code base. Based on our own experience we can say that Flux is great when you work with dynamically updated data.
The one-way data flow in ReactJS keeps complexity under control. It’s much easier to debug self-contained components of large ReactJS applications than it is with similarly large AngularJS applications.