use react request animation frame
guard all methods with allow read