Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AbortController is missing #18115

Closed
giacomocerquone opened this issue Feb 27, 2018 · 31 comments
Closed

AbortController is missing #18115

giacomocerquone opened this issue Feb 27, 2018 · 31 comments
Labels
Bug JavaScript Platform: Linux Building on Linux. Resolution: Locked This issue was locked by the bot.

Comments

@giacomocerquone
Copy link

Is this a bug report?

Yes. AbortController is a new spec (you can find info here: https://developers.google.com/web/updates/2017/09/abortable-fetch)

Have you read the Contributing Guidelines?

Yes

Environment

Environment:
  OS: Linux 4.13
  Node: 8.9.4
  Yarn: 1.3.2
  npm: 5.6.0
  Watchman: Not Found
  Xcode: N/A
  Android Studio: Not Found

Packages: (wanted => installed)
  react: ^16.0.0 => 16.2.0
  react-native: ^0.53.0 => 0.53.0

Steps to Reproduce

  1. Istantiate an AbortController
  2. Write a fetch request passing the signal
  3. Try to abort the fetch request

Expected Behavior

The requested behaviour is to abort the fetch request.

Actual Behavior

Nothing happens

Reproducible Demo

Something like this:

const controller = new AbortController();
const signal = controller.signal;

setTimeout(() => controller.abort(), 5000);

fetch(url, { signal }).then(response => {
  return response.text();
}).then(text => {
  console.log(text);
});

My question is a technical one: is the react native core that needs to be updated in order to support this? Or is it something that babel can patch with a new version?

@hyochan
Copy link
Contributor

hyochan commented Feb 27, 2018

Having same issue. This should be in react-native too.

@chirag04
Copy link
Contributor

might be worth waiting for JakeChampion/fetch#572 to merge.

@giacomocerquone
Copy link
Author

Very good, at least I should be able to use this polyfill right now in react native right?

@chirag04
Copy link
Contributor

I haven’t used it but should be able to use it. Might be worth posting here what you find out

@giacomocerquone
Copy link
Author

Great, it works!
I'm not on a create react app, but I've just followed the instruction for it (I'm actually on a react-native project not even on a create react native app

So installed the module, imported it like this:

import 'abortcontroller-polyfill';

and then used it like this:

const AbortController = window.AbortController;
const controller = new AbortController()
const signal = controller.signal

I'd not close the issue, because we're still waiting for the official spec.
Thank you @chirag04 for linking me the right resource ☺️

@sibelius
Copy link

@giacomocerquone the polyfill is working on react-native (#18115 (comment))

do u have an example of it?

@giacomocerquone
Copy link
Author

Just doing what I wrote in the previous comment should be fine. All the code then would be equals to the one used in the browsers like the piece showed on mozilla doc: https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort

I've actually a production app where I'm using this. I can't share directly the code of course, but I can re-arrange an example if it is strictly needed :)

@sibelius
Copy link

it works, but won't really cancel the request, it will just throw an exception

tks

@giacomocerquone
Copy link
Author

Basically it just rejects the promise.
It's true that it won't cancel the request (we should also specify precisely what we mean when we write 'cancel'), but as far as I'm concerned, my interest was to not let the request hanging and to 'close the door' to all the responses that would have come after the abort call.

@stale
Copy link

stale bot commented Jun 23, 2018

Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs. You may also label this issue as "For Discussion" or "Good first issue" and I will leave it open. Thank you for your contributions.

@stale stale bot added the Stale There has been a lack of activity on this issue and it may be closed soon. label Jun 23, 2018
@mrjackyliang
Copy link

I just tried it today with the polyfills, and it doesn’t work.

@stale stale bot removed the Stale There has been a lack of activity on this issue and it may be closed soon. label Jun 24, 2018
@JoseVf
Copy link

JoseVf commented Aug 8, 2018

Is there any update about this?


@giacomocerquone It would be nice if you can provide an example to understand better how it works 😄

@AugustGSP
Copy link

Any update on this?

AbortController + signal imports and fires, but the fetch is not interrupted. I tried @giacomocerquone 's resolution, but that didn't abort the fetch either. Is there another polyfill i'm missing?

function api(endpoint, method, body, contentType = 'application/json') {
	
	const controller = new AbortController()
	const signal = controller.signal
	setTimeout(() => controller.abort(), 500)

	let data = {
		signal,
		method: method,
		headers: {
			'Content-Type': contentType
		} 
	}

	if (body) {
		data['body'] = JSON.stringify(body)
	}

	return fetch(`${API_URI}/${endpoint}`, data)
	.then(response => {
		if (!response.ok) {
			throw Error(response.statusText)
		}

		return response.json()
	})
	.then(response => {
		return response.data
	})
	.catch(error => {
		console.log('API request failed:', error.message)

		return false
	})
}

@TimurAsayonok
Copy link

Same problem.

Try to cancel fetch after timeout (5 sec), for simulating bad connection I'm using Network link conditioner

@samueladekunle
Copy link

samueladekunle commented Sep 12, 2018

The abortcontroller-polyfill works

A code snippet:

import "abortcontroller-polyfill";

class App extends React.Component {
    constructor() {
        const AbortController = window.AbortController;
        this.controller = new AbortController();
        this.signal = this.controller.signal;
    }
    componentDidMount() {
        const url = "https://myurl.com";
        const signal = this.signal;

        fetch(url, { signal })
        .then(res => res.json())
        .then(json => console.log(json))
        .catch(err => {
            // You can catch the error
            // thrown by the polyfill here.
            if (err.name == "AbortError") {
                console.log("Fetch Aborted");
            } else {
               //Catch other errors.
            }
        });
    }
    componentWillUnmount() {
        this.controller.abort();
    }
    /*--Rest of the code.--*/
}

@chmartinez
Copy link

@samueladekunle you're using window.AbortController... is that intended?
In my case (using react-native v0.54.4) the abortcontroller's polyfill only works if I use its internal abortableFetch and AbortController implementations. Why? Because the polyfill works like this: if it founds a fetch object, it uses it. Otherwise, it uses own implementation.

So, to put it simply:

  • v0.54 uses whatwg-fetch if present (https://github.com/facebook/react-native/blob/0.54-stable/Libraries/Network/fetch.js#L19)
  • whatwg-fetch does not implement AbortController whatsoever and its fetch implementation is not compliant with the new spec (at least, v1.0.0 which is the one RN 0.54.4 uses).
  • abortcontroller-polyfill is implementing the AbortController stuff but if your code is using the fetch from whatwg-fetch` it's not gonna work. Hence, you need to use the polyfill's fetch.

Apparently, this issue should not happen with react-native 0.57 since whatwg-fetch was remove with this commit but I'm not 100% sure.

@m-vdb
Copy link

m-vdb commented Oct 2, 2018

$ npm ls whatwg-fetch
└─┬ react-native@0.57.0
  └─┬ fbjs@0.8.17
    └─┬ isomorphic-fetch@2.2.1
      └── whatwg-fetch@3.0.0

@arthurfranca
Copy link

I think the polyfill works as expected on RN 0.57. But sometimes, the abort event is received after the fetch promise has already resolved and won the Promise.race.
Probably because of using setTimeout that places the dispatch event on a queue.

One way to get around this is checking for controller.signal.aborted flag if you are no longer interested in the response. (e.g. the component is unmounted)

@hyochan
Copy link
Contributor

hyochan commented Dec 18, 2018

How do you solve the jest mocking when using @giacomocerquone solution?
image

I've tried to mock AbortController like below and won't work.

export default class AbortController {
  constructor() {
    this.controller = new AbortController();
  }
}

@Jyrno42
Copy link
Contributor

Jyrno42 commented Dec 31, 2018

Apparently, this issue should not happen with react-native 0.57 since whatwg-fetch was remove with this commit but I'm not 100% sure.

The polyfill in that commit does not contain any logic for Abort controllers so I do not think it works on latest rn as well (since the vendored file is based on 1.0.0 of whatwg-fetch).

Jyrno42 added a commit to Jyrno42/rn-tg-resources-tester that referenced this issue Dec 31, 2018
see facebook/react-native#18115

what i tried:

- using fetch patch from abortcontroller polyfill
  - 'abortcontroller-polyfill/dist/polyfill-patch-fetch'
  - did not get it to work (weird error inside whatwg-fetch)
- patching react-native to use cross-fetch (by changing react-native/Libraries/Network/fetch.js)
  - did not get it to work (weird error inside cross-fetch)
- removing vendored whatwg-fetch from react-native source code (so the app loads real whatwg-fetch)
  - did not work
@TimurAsayonok
Copy link

TimurAsayonok commented Jan 15, 2019

Any updates of this?
Have same problem. I have tried to use new version of whatwg-fetch 3.0.0 with Aborting fetch, and it's work but, when we create new build it will crash. Because they change code in 3.0.0 for browsers.

@chmartinez can you give example how we can you abortableFetch from abortcontroller-polyfill

@TimurAsayonok
Copy link

TimurAsayonok commented Jan 16, 2019

So, I try to use cross-fetch instead latest version of whatwg-fetch

Upd. Looks like it is working. And what I have done:

  1. Install cross-fetch
  2. Install abortcontroller-polyfill for using AbortController()
  3. import fetch like import fetch from 'cross-fetch';
  4. import abortcontroller-polyfill like import "abortcontroller-polyfill"
  5. create signal for fetch:
const AbortController = window.AbortController;
this.controller = new AbortController();
this.signal = this.controller.signal;
  1. use signal from step 5) in your fetch fetch(url, {signal}). This fetch will be from cross-fetch

@giacomocerquone
Copy link
Author

I wrote an article for all the people that were asking me to shed some light about this matter: https://blog.giacomocerquone.com/aborting-fetch-react-native/

In the next one I will give you some ready to use code to reject requests, but this time instead of giving you code I wanted to explain what is going on and how and why is useless to use polyfills in react native as of now.

Enjoy, hope I did a good thing!
As I wrote in the post, in the next article I will share with you my simple and short piece of code that I use to make requests that implements fetch rejection with few lines of code among other things

@atkit
Copy link

atkit commented May 6, 2019

Seems like work on AbortController for RN was already done.
5e36b0c

@raunaqss
Copy link

raunaqss commented Jun 3, 2019

@atkit Yes, work on this has been done, however, a comment on the issue related to this merge says that this work is focussed towards RN 0.60+, hence not support on previous versions.

@giacomocerquone
Copy link
Author

@raunaqss as I've already said, an implementation from facebook was needed in order to make an abortion work, hence old version cannot be supported. Why the downvote?

@JordanMRichards
Copy link

Support for this was included in the new version; 0.60, which was released yesterday.

https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#060

@SaeedZhiany
Copy link
Contributor

@JordanRichards-hx
I just created a fresh Rn project (0.60.5) with typescript. I see nothing added to fetch's RequestInfo and RequestInit interfaces. is the typescript definition files outdated or we must use RN's fetch API differently? I just confused about how I use the feature.

@atkit
Copy link

atkit commented Aug 22, 2019

I found an example here:
5e36b0c#diff-3e169de4973928b8c4e90923cac0651aR22

And I checked that it is possible to create instance of AbortController but yes @types/react-native still have no information about AbortController so typescript shows an error. I think it is good opportunity to contribute to @types/react-native (type definitions could be found here https://github.com/mysticatea/abort-controller/blob/master/dist/abort-controller.d.ts)

@SaeedZhiany
Copy link
Contributor

Is AbortController an RN built-in class? or I should install it from abort-controller repository

I'm asking because of the typescript issue. maybe it's possible to export a utility function to create it for the user and so there is no need to install the lib in the main project

@atkit
Copy link

atkit commented Aug 23, 2019

As I can see from codebase it is installed as dependancy to react-native, but typing information is not yet in place for some reason. Typing information lives outside of react-native in repo for all typescript types. As it is a global class for React Native this typing needs to be provided.

I did not start using this AbortController in my apps yet, but I'm planning to implement timeout and cancel operations at some point. I checked quickly it does work and it cancels operation with special type of Error.

facebook-github-bot pushed a commit that referenced this issue Mar 16, 2020
Summary:
This sync includes the following changes:
- **[b5c6dd2de](facebook/react@b5c6dd2de )**: Don't use Spread in DevTools Injection (#18277) //<Sebastian Markbåge>//
- **[a463fef31](facebook/react@a463fef31 )**: Revert "[React Native] Add getInspectorDataForViewAtPoint (#18233)" //<Sebastian Markbage>//
- **[dc7eedae3](facebook/react@dc7eedae3 )**: Encode server rendered host components as array tuples (#18273) //<Sebastian Markbåge>//
- **[bf351089a](facebook/react@bf351089a )**: [React Native] Add getInspectorDataForViewAtPoint (#18233) //<Ricky>//
- **[99d737186](facebook/react@99d737186 )**: [Flight] Split Streaming from Relay Implemenation (#18260) //<Sebastian Markbåge>//
- **[160505b0c](facebook/react@160505b0c )**: ReactDOM.useEvent: Add more scaffolding for useEvent hook (#18271) //<Dominic Gannaway>//
- **[526c12f49](facebook/react@526c12f49 )**: Enable enableProfilerCommitHooks flag for FB (#18230) //<Brian Vaughn>//
- **[29534252a](facebook/react@29534252a )**: ReactDOM.useEvent add flag and entry point (#18267) //<Dominic Gannaway>//
- **[704c8b011](facebook/react@704c8b011 )**: Fix Flow type for AnyNativeEvent (#18266) //<Dominic Gannaway>//
- **[bdc5cc463](facebook/react@bdc5cc463 )**: Add Relay Flight Build (#18242) //<Sebastian Markbåge>//
- **[7a1691cdf](facebook/react@7a1691cdf )**: Refactor Host Config Infra (getting rid of .inline*.js) (#18240) //<Sebastian Markbåge>//
- **[238b57f0f](facebook/react@238b57f0f )**: [Blocks] Make it possible to have lazy initialized and lazy loaded Blocks (#18220) //<Sebastian Markbåge>//
- **[235a6c4af](facebook/react@235a6c4af )**: Bugfix: Dropped effects in Legacy Mode Suspense (#18238) //<Andrew Clark>//
- **[562cf013d](facebook/react@562cf013d )**: Add a flag to disable module pattern components (#18133) //<Dan Abramov>//
- **[115cd12d9](facebook/react@115cd12d9 )**: Add test run that uses www feature flags (#18234) //<Andrew Clark>//
- **[4027f2a3b](facebook/react@4027f2a3b )**: Break up require/import statements in strings (#18222) //<Christoph Nakazawa>//
- **[024a76431](facebook/react@024a76431 )**: Implemented Profiler onCommit() and onPostCommit() hooks (#17910) //<Brian Vaughn>//
- **[d35f8a581](facebook/react@d35f8a581 )**: feat: honor displayName of context types (#18224) //<Brian Vaughn>//
- **[3ee812e6b](facebook/react@3ee812e6b )**: Revert "feat: honor displayName of context types (#18035)" (#18223) //<Dominic Gannaway>//
- **[6a0efddd8](facebook/react@6a0efddd8 )**: Modern Event System: export internal FB flag for testing (#18221) //<Dominic Gannaway>//
- **[fa03206ee](facebook/react@fa03206ee )**: Remove _ctor field from Lazy components (#18217) //<Sebastian Markbåge>//
- **[2fe0fbb05](facebook/react@2fe0fbb05 )**: Use accumulateTwoPhaseDispatchesSingle directly (#18203) //<Dominic Gannaway>//
- **[503fd82b4](facebook/react@503fd82b4 )**: Modern Event System: Add support for internal FB Primer (#18210) //<Dominic Gannaway>//
- **[45c172d94](facebook/react@45c172d94 )**: feat: honor displayName of context types (#18035) //<Brian Vaughn>//
- **[ec652f4da](facebook/react@ec652f4da )**: Bugfix: Expired partial tree infinite loops (#17949) //<Andrew Clark>//
- **[d2158d6cc](facebook/react@d2158d6cc )**: Fix flow types (#18204) //<Brian Vaughn>//
- **[7e83af17c](facebook/react@7e83af17c )**: Put React.jsx and React.jsxDEV behind experimental build (#18023) //<Luna Ruan>//
- **[8cb2fb21e](facebook/react@8cb2fb21e )**: Refine isFiberSuspenseAndTimedOut (#18184) //<Dominic Gannaway>//
- **[62861bbcc](facebook/react@62861bbcc )**: More event system cleanup and scaffolding (#18179) //<Dominic Gannaway>//
- **[8ccfce460](facebook/react@8ccfce460 )**: Only use Rollup's CommonJS plugin for "react-art" (#18186) //<Sebastian Markbåge>//
- **[c26506a7d](facebook/react@c26506a7d )**: Update react-shallow-renderer from 16.12.0 to 16.13.0 (#18185) //<Minh Nguyen>//
- **[26aa1987c](facebook/react@26aa1987c )**: [Native] Enable and remove targetAsInstance feature flag. (#18182) //<Eli White>//
- **[4469700bb](facebook/react@4469700bb )**: Change ReactVersion from CJS to ES module (#18181) //<Sebastian Markbåge>//
- **[58eedbb02](facebook/react@58eedbb02 )**: Check in a forked version of object-assign only for UMD builds (#18180) //<Sebastian Markbåge>//
- **[053347e6b](facebook/react@053347e6b )**: react-test-renderer: improve findByType() error message (#17439) //<Henry Q. Dineen>//
- **[4ee592e95](facebook/react@4ee592e95 )**: Add an early invariant to debug a mystery crash (#18159) //<Dan Abramov>//
- **[7ea4e4111](facebook/react@7ea4e4111 )**: Fix typo in warning text (#18103) //<Sophie Alpert>//
- **[79a25125b](facebook/react@79a25125b )**: feat: add recommended config eslint rule (#14762) //<Simen Bekkhus>//
- **[ae60caacf](facebook/react@ae60caacf )**: [Fabric] Fix targetAsInstance dispatchEvent "cannot read property of null" (#18156) //<Joshua Gross>//
- **[d72700ff5](facebook/react@d72700ff5 )**: Remove runtime dependency on prop-types (#18127) //<Dan Abramov>//
- **[549e41883](facebook/react@549e41883 )**: Move remaining things to named exports (#18165) //<Sebastian Markbåge>//
- **[739f20bed](facebook/react@739f20bed )**: Remove Node shallow builds (#18157) //<Sebastian Markbåge>//
- **[3e809bf5d](facebook/react@3e809bf5d )**: Convert React Native builds to named exports (#18136) //<Sebastian Markbåge>//
- **[869dbda72](facebook/react@869dbda72 )**: Don't build shallow renderer for FB (#18153) //<Dan Abramov>//
- **[293878e07](facebook/react@293878e07 )**: Replace ReactShallowRenderer with a dependency (#18144) //<Minh Nguyen>//
- **[b4e314891](facebook/react@b4e314891 )**: Remove unused flag (#18132) //<Dan Abramov>//
- **[849e8328b](facebook/react@849e8328b )**: Remove unnecessary warnings (#18135) //<Dan Abramov>//
- **[f9c0a4544](facebook/react@f9c0a4544 )**: Convert the rest of react-dom and react-test-renderer to Named Exports (#18145) //<Sebastian Markbåge>//
- **[c1c5499cc](facebook/react@c1c5499cc )**: update version numbers for 16.13 (#18143) //<Sunil Pai>//
- **[e1c7e651f](facebook/react@e1c7e651f )**: Update ReactDebugHooks to handle composite hooks (#18130) //<Brian Vaughn>//
- **[d28bd2994](facebook/react@d28bd2994 )**: remove OSS testing builds (#18138) //<Sunil Pai>//
- **[8e13e770e](facebook/react@8e13e770e )**: Remove /testing entry point from 'react' package (#18137) //<Sebastian Markbåge>//
- **[60016c448](facebook/react@60016c448 )**: Export React as Named Exports instead of CommonJS (#18106) //<Sebastian Markbåge>//
- **[8d7535e54](facebook/react@8d7535e54 )**: Add nolint to FB bundle headers (#18126) //<Dominic Gannaway>//
- **[bf13d3e3c](facebook/react@bf13d3e3c )**: [eslint-plugin-react-hooks] Fix cyclic caching for loops containing a… (#16853) //<Moji Izadmehr>//
- **[501a78881](facebook/react@501a78881 )**: runAllPassiveEffectDestroysBeforeCreates's feature flag description typo fixed (#18115) //<adasq>//
- **[09348798a](facebook/react@09348798a )**: Codemod to import * as React from "react"; (#18102) //<Sebastian Markbåge>//
- **[78e816032](facebook/react@78e816032 )**: Don't warn about unmounted updates if pending passive unmount (#18096) //<Brian Vaughn>//
- **[2c4221ce8](facebook/react@2c4221ce8 )**: Change string refs in function component message (#18031) //<Sebastian Markbåge>//
- **[65bbda7f1](facebook/react@65bbda7f1 )**: Rename Chunks API to Blocks (#18086) //<Sebastian Markbåge>//
- **[8b596e00a](facebook/react@8b596e00a )**: Remove unused arguments in the reconciler (#18092) //<Dan Abramov>//
- **[5de5b6150](facebook/react@5de5b6150 )**: Bugfix: `memo` drops lower pri updates on bail out (#18091) //<Andrew Clark>//
- **[abfbae02a](facebook/react@abfbae02a )**: Update Rollup version to 1.19.4 and fix breaking changes (#15037) //<Kunuk Nykjær>//
- **[b789060dc](facebook/react@b789060dc )**: Feature Flag for React.jsx` "spreading a key to jsx" warning (#18074) //<Sunil Pai>//
- **[3f85d53ca](facebook/react@3f85d53ca )**: Further pre-requisite changes to plugin event system (#18083) //<Dominic Gannaway>//
- **[ea6ed3dbb](facebook/react@ea6ed3dbb )**: Warn for update on different component in render (#17099) //<Andrew Clark>//
- **[085d02133](facebook/react@085d02133 )**: [Native] Migrate focus/blur to call TextInputState with the host component (#18068) //<Eli White>//
- **[1000f6135](facebook/react@1000f6135 )**: Add container to event listener signature (#18075) //<Dominic Gannaway>//
- **[a12dd52a4](facebook/react@a12dd52a4 )**: Don't build some packages for WWW (#18078) //<Dan Abramov>//
- **[2512c309e](facebook/react@2512c309e )**: Remove Flare bundles from build (#18077) //<Dominic Gannaway>//
- **[4912ba31e](facebook/react@4912ba31e )**: Add modern event system flag + rename legacy plugin module (#18073) //<Dominic Gannaway>//
- **[4d9f85006](facebook/react@4d9f85006 )**: Re-throw errors thrown by the renderer at the root in the complete phase (#18029) //<Andrew Clark>//
- **[14afeb103](facebook/react@14afeb103 )**: Added missing feature flag //<Brian Vaughn>//
- **[691096c95](facebook/react@691096c95 )**: Split recent passive effects changes into 2 flags (#18030) //<Brian Vaughn>//
- **[56d8a73af](facebook/react@56d8a73af )**: [www] Disable Scheduler `timeout` w/ dynamic flag (#18069) //<Andrew Clark>//
- **[d533229fb](facebook/react@d533229fb )**: Fix Prettier //<Dan Abramov>//
- **[56a8c3532](facebook/react@56a8c3532 )**: eslint-plugin-react-hooks@2.4.0 //<Dan Abramov>//
- **[93a229bab](facebook/react@93a229bab )**: Update eslint rule exhaustive deps to use new suggestions feature (#17385) //<Will Douglas>//
- **[9def56ec0](facebook/react@9def56ec0 )**: Refactor DOM plugin system to single module (#18025) //<Dominic Gannaway>//
- **[2d6be757d](facebook/react@2d6be757d )**: [Native] Delete NativeComponent and NativeMethodsMixin (#18036) //<Eli White>//
- **[d4f2b03](facebook/react@d4f2b0379 )**: Add Auto Import to Babel Plugin  (#16626) //<Luna Ruan>//
- **[8777b44e9](facebook/react@8777b44e9 )**: Add Modern WWW build (#18028) //<Dan Abramov>//
- **[a607ea4c4](facebook/react@a607ea4c4 )**: Remove getIsHydrating (#18019) //<Dan Abramov>//
- **[f7278034d](facebook/react@f7278034d )**: Flush all passive destroy fns before calling create fns (#17947) //<Brian Vaughn>//
- **[529e58ab0](facebook/react@529e58ab0 )**: Remove legacy www config from Rollup build (#18016) //<Dominic Gannaway>//
- **[42918f40a](facebook/react@42918f40a )**: Change build from babylon to babel (#18015) //<Dominic Gannaway>//
- **[df5faddcc](facebook/react@df5faddcc )**: Refactor commitPlacement to recursively insert nodes (#17996) //<Dominic Gannaway>//
- **[517de74b0](facebook/react@517de74b0 )**: Tweak comment wording (#18007) //<Dan Abramov>//
- **[b63cb6f6c](facebook/react@b63cb6f6c )**: Update ReactFiberExpirationTime.js (#17825) //<haseeb>//
- **[89c6042df](facebook/react@89c6042df )**: fix: typo in test (#18005) //<Jesse Katsumata>//
- **[4f71f25a3](facebook/react@4f71f25a3 )**: Re-enable shorthand CSS property collision warning (#18002) //<Sophie Alpert>//
- **[c55c34e46](facebook/react@c55c34e46 )**: Move React Map child check to behind flags or __DEV__ (#17995) //<Dominic Gannaway>//
- **[3f814e758](facebook/react@3f814e758 )**: Fix Flow type for React Native (#17992) //<Dan Abramov>//
- **[256d78d11](facebook/react@256d78d11 )**: Add feature flag for removing children Map support (#17990) //<Dominic Gannaway>//
- **[9dba218d9](facebook/react@9dba218d9 )**: [Mock Scheduler] Mimic browser's advanceTime (#17967) //<Andrew Clark>//
- **[d6e08fe0a](facebook/react@d6e08fe0a )**: Remove Suspense priority warning (#17971) //<Dan Abramov>//
- **[812277dab](facebook/react@812277dab )**: Fix onMouseEnter is fired on disabled buttons (#17675) //<Alfredo Granja>//
- **[3e9251d60](facebook/react@3e9251d60 )**: make testing builds for React/ReactDOM (#17915) //<Sunil Pai>//
- **[ace9e8134](facebook/react@ace9e8134 )**: Simplify Continuous Hydration Targets (#17952) //<Sebastian Markbåge>//
- **[7df32c4c8](facebook/react@7df32c4c8 )**: Flush `useEffect` clean up functions in the passive effects phase (#17925) //<Brian Vaughn>//
- **[434770c3b](facebook/react@434770c3b )**: Add beforeRemoveInstance method to ReactNoop (#17959) //<Dominic Gannaway>//
- **[6ae2c33a7](facebook/react@6ae2c33a7 )**: StrictMode should call sCU twice in DEV (#17942) //<Brian Vaughn>//
- **[9dbe1c54d](facebook/react@9dbe1c54d )**: Revert "Bugfix: Expiring a partially completed tree (#17926)" (#17941) //<Andrew Clark>//
- **[b2382a715](facebook/react@b2382a715 )**: Add ReactDOM.unstable_renderSubtreeIntoContainer warning flag (#17936) //<Dominic Gannaway>//
- **[01974a867](facebook/react@01974a867 )**: Bugfix: Expiring a partially completed tree (#17926) //<Andrew Clark>//

Changelog:
[General][Changed] - React Native sync for revisions 241c446...b5c6dd2

Reviewed By: gaearon

Differential Revision: D20347361

fbshipit-source-id: e9e6282474ab6471585e8e7fb6ea8518aa48390d
@facebook facebook locked as resolved and limited conversation to collaborators Apr 15, 2020
@react-native-bot react-native-bot added the Resolution: Locked This issue was locked by the bot. label Apr 15, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Bug JavaScript Platform: Linux Building on Linux. Resolution: Locked This issue was locked by the bot.
Projects
None yet
Development

Successfully merging a pull request may close this issue.