React Native v0.24.0 released

v0.24.0 on GitHub (npm)

Docs here:

This release includes a series of improvements for coalescing touch and scroll events on iOS by Martin Kralik (@majak). These improvements fixed a bug that was preventing some native touch events from being dispatched to JS. This also improves the perceived performance of components that rely on these touch events, like parallax scrollers. Thanks, Martin! ๐Ÿ‘๐Ÿป

Known issues weโ€™re fixing

  • RefreshControl broken on iOS: #6929 (fix: 03c1688)
  • Hot module reloading raises an error: #6798
  • response.json() hangs when Chrome debugging is enabled: #6679
  • Unable to require images under node_modules: #6638

Ongoing issue thread: #6800

Breaking changes

  • Android no longer includes Stetho by default: 3c488af
  • Removed RCTBridgeModuleClassIsRegistered from iOS: a16771c
  • Removed sendMomentumEvents prop from ScrollView, which was intended for internal usage
  • StyleSheetRegistry has been renamed to ReactNativePropRegistry. This module is private so it shouldn't affect everyone using React Native's public API, though: 433fb33

New features

  • Enhancements to NavigationExperimental by @hedgerwang:
    • Animations and gestures for pagers: 4f8668b
    • Use the same type of animation (spring) in NavigationCardStack and NavigationAnimatedView: 07697d1
    • Reduce extra rendering in NavigationHeader: 62e80a6

  • Experimental WindowedListView, which uses a placeholder spacer view for off-screen rows. It is not a drop-in replacement for ListView: cd79e26

  • Several improvements to the docs

Bug fixes

  • Use a monotonic clock instead of the current time in the profiling tools: ac03c47
  • Various Hot Module Reloading fixes: 98411f1, 51b5423
  • Fix views not stretching vertically in column layout: #2724, d957570
  • Use semver in the .flowconfig file to allow you to use patch versions of Flow without updating .flowconfig: #6767


New features
  • ๐ŸŽ‰ Preliminary support for delegating Animated commands to the native UI thread. Credit goes to @kmagiera for the design and implementation, @brentvatne for experimentation and critical feedback, and @astreet and @vjeux for a thorough code review. The implementation is not complete but will eventually unblock Navigation animations from other heavy work on the JS thread: #6466
  • Modal now warns if you don't provide the onRequestClose prop: ce81f8b
  • Vibration patterns: e20e8a3
  • DrawerLayoutAndroid has a new statusBackBackgroundColor prop, which tells it to draw over the native Android toolbar. See the screenshots in the PR: #6218
  • ScrollView has a new endFillColor prop, which tells React Native to fill in the rest of the scroll view with a color in the event that the scroll view's viewport is larger than its content. This is an advanced performance optimization to reduce overdraw; measure performance before you use it: 4498bc8
  • TextInput supports the 'selectTextOnFocus' prop now: #6654
  • Start creating views before the end of a batch for performance: 6a3b334
  • ReadableArray and ReadableHashMap now define convenience methods: toArrayList and toHashMap: #6639, #6762
  • Returning true from a BackAndroid hardwareBackPress handler stops invocation of previously registered handlers and the default OS action: 67efe4c (reverted in ede99ee)
  • Slider component is available: afe78f6
Bug fixes
  • Fix clipping rectangle calculation for nested scroll views: e8e3182
  • Don't strip NativeRunnable constructor with ProGuard: 393890e
  • Fix fetching source maps in Genymotion: 6c22a21
  • Prevent a parent viewโ€™s touched state from applying to its children when nesting TouchableNativeFeedback components: #6783


New features
  • Open-source FBPortForwarding, which proxies network requests from a device to your computer like adb reverse. It is not integrated with React Native, but the code is here if you want this feature: FBPortForwarding: c4699d8
  • ActionSheetIOS has a new message option: #6685
Bug fixes
  • ๐ŸŽ‰ Fix how native events are coalesced when sending them to JS, specifically touch and scroll events, in order to respect their ordering (#5246 (comment)). When all events can be coalesced, they are processed ASAP instead of waiting for the next JS frame. Several diffs from @majak: a496baa, a37075d, cefc5a6, 7c2b397, b1b53aa, 1d3db4c (reverted in 144dc30 , reinstated with a fix in 02b6e38 ), 31bb85a
  • Lock accesses to the flow ID map (for profiling) for thread safety: 2be42ab
  • Stop the JS run loop from -[RCTJSExecutor invalidate] instead of dealloc so that it is guaranteed to be stopped from the JS thread: 99c7de2
  • Prevent dev menu from resetting simulator orientation: #6765
  • Increase dev tools timeout: b00c77a
  • Use indirect jumps in the profiling trampoline to support larger binaries when needing to jump more than 32MiB: 2f27039
  • Make SliderIOS retain its touch responder status: 52ddfd9