React async caching