Why Component getters marks state as dirty ?

It affects finding changes for client side, why not use getState(false) in getters ?
For example:
TextArea.getRows actually uses getState(true)

I agree: A getter should never change the internal state of an object!

In my case this led to a wrong / unexpected behavior of the UI when dummy changes triggert Focus- and BlurListeners on the client side. I helped myself with a state check & reset:

public static String getStyleNameNoDirty(Component component) {
    assertNotNull(component);

    UI ui = component.getUI();
    boolean isDirty = ui != null && ui.getConnectorTracker().isDirty(component);
    String result = component.getStyleName();
    if (ui != null && isDirty == false) {
        ui.getConnectorTracker().markClean(component);
    }

    return result;
}

Is there a reason why getStyleName() marks a component as dirty?

There’s a fix for most of these already in the master branch: https://dev.vaadin.com/review/#/c/3809/

Most likely coming in the next maintenance release.