Now, when we have understood how we had separated the two phases, let's talk about why we did it.
Why?
Predictability
First, using change detection only for updating the view state limits the number of places where the application model can be changed. In this example, it can happen only in the rateTalk function. A watcher cannot "automagically" update it. This makes ensuring invariants easier, which makes code easier to troubleshoot and refactor.
Second, it helps us understand the view state propagation. Consider what we can say about the talk component just by looking at it in isolation. Since we use immutable data, we know that as long as we do not do talk= in the Talk component, the only way to change what the component displays is by updating...