In our previous example, the components we built communicated with each other exclusively through the application state, both for reading and transacting data. While this approach works, it is not always the best, except for very simple use cases. In this section, we will learn an alternate way of performing this communication—by using core.async channels.
The application we will build is a super-simple virtual agile board. If you've heard of it, it's similar to Trello[10]. If you haven't, fear not—it's essentially a task management web application in which you have cards that represent tasks. You then move these tasks between columns such as Backlog, In Progress, and Done.
By the end of this section, the application will look like the following:
We'll limit ourselves to a single feature—moving cards between...