If you want to have multiple rectangles with the same color cycle rules, you can have something like a collection where you would save the color based on the clicks on the rectangles. You will need to have something to uniquely identify the rectangles (in the example below I'm calling them "R1", "R2", "R3" and "R4"):

To implement that I updated two properties in the rectangles: Color and OnSelect. This is the OnSelect expression for the first rectangle (for the others you need to change the name on the second line):
With(
{rectName:"R1"},
With(
{currentState:LookUp(stateCollection, Name = rectName)},
If(
IsBlank(currentState),
Collect(stateCollection, {Name: rectName, Color:"G"}), // first click, go to green
Patch(
stateCollection,
currentState,
{
Color:Switch(
currentState.Color,
"G", "R", // From green to red
"R", "W", // From red to white
"G") // otherwise back to green
}))))
It first tries to find the state for that rectangle in the collection; if it doesn't find any, then go to the state where the first click would take them (green). If it does, then update the collection with the next color that it should go.
The Color property of the rectangles performs a lookup in the collection for the rectangle name (you would need to update the name in the second line for the remaining rectangles in the app):
Switch(
LookUp(stateCollection, Name = "R1", Color),
"G", Color.Green,
"R", Color.Red,
Color.White)
Since the initial state is white, we use it as the "otherwise" argument to the Switch function - it will work either if there is a record for the rectangle with the "W" color, or if there is none (in which case the LookUp function would return a blank value).
The app shown below is attached if you are interested in seeing it.
Hope this helps!