As others have noted, this is a common design problem for any client-server application where there can be more than one client. I think the key is to carefully examine what state you need to maintain in your client. Questions such as, "Does your client need up-to-date information about the status of the server or the remote database, or just need the latest information about the actions the client takes? For example, do you need to know what the remote database table is after updating, or you just need to know Was your update successful or not?
Another thing I've seen that can lead to the wrong way is too early. To improve efficiency, the design sometimes tries to include too many states in the local client, believing that this will reduce the number of calls on the remote server and make the application more responsive. However, often you may encounter an overly complex implementation, which is difficult to cope with many local management costs, often including a lot of information that is used or used only in limited or rarely used parts of the client interface. The next thing you know, your application is losing effectiveness because it works to maintain state synchronization, which is not needed.
The problem here is due to our tendency to think about problems in a serialized way. It is natural. However, the problem here is not entirely suitable for this way of thinking. The remote state of the system changes at an unpredictable rate. Even if you adopt an architecture that pushes changes to the client, you will encounter problems associated with developing how often such changes should be pushed, and then how to reflect these changes in the interface, so that the user becomes a consistent and meaningful picture.
My approach, which is just one of many and may not be the most ideal, is to model a web application along the same lines as many database clients (and to some extent even Clojure's own STMs). A state in a client is a snapshot of a remote state at a specific point in time. It may not be accurate or relevant, but it must be consistent. When a client sends changes, it may or may not be successful, depending on what has changed on the server, since I started to enter my change in the client. If he succeeds, he completes completely, and if he fails, he fails completely.
As others have noted, this is not directly related to the reagent. This is a boder design problem. However, this may have an indirect effect. For example, when you update a reagent atom, your reagent contains er will be displayed. The atom knows when it is being updated, but it does not know when the update is updating existing information without change, so you really want to update the atom when it needs to be updated, because something has changed. However, if this happens very often, and your component is really very complex, you probably will not see any real effect, even if you often update updates such as updates.
I would focus on minimizing the state and developing a really simple design, then download the test and develop if there are performance problems and deal with them as they arise.