Instead of creating "reactive queries" that sort entities based on added/removed components, I think I will modify the Query class to process queries with extra selectors:
Added() → query only process the entity when it's the first tick the component is added
Removed() → query only process the entity when the componet has been removed at this tick
Modified() → query only process the entity when the componet has been modified at this tick