In the previous three sections, we looked into the basics of using immutable data structures and that Angular can be configured to assume that components only change when their input changes. We learned about the concept of "pure" components and how we can configure Angular's change detection to gain some performance benefits. We also learned about the concept of container components to separate our UI components from our application state.
Within this section, we would like to refactor our application to include our newly learned skills about immutability, "pure" components, and container components.
Let's start with our existing task list component. Currently, this component is directly interacting with data coming from the task service. However, we have learned that "pure" UI components should never directly retrieve...