ReferenceError: Property 'React' doesn't exist after upgrade react-native to 0.64.0
See original GitHub issueDo you want to request a feature or report a bug? Report a bug and suggestion to fix it.
What is the current behavior?
I try to upgrade to 0.64.0 from 0.63.4 which include react 17 with the New JSX Transform.
After I remove React import from all my component files.
I got below error when running the app yarn android
with yarn start --reset-cache
ReferenceError: Property 'React' doesn't exist
This error is located at:
in App (at renderApplication.js:47)
in RCTView (at View.js:34)
in View (at AppContainer.js:107)
in RCTView (at View.js:34)
in View (at AppContainer.js:134)
in AppContainer (at renderApplication.js:40), js engine: hermes
ReferenceError: Property 'React' doesn't exist
This error is located at:
in App (at renderApplication.js:47)
in RCTView (at View.js:34)
in View (at AppContainer.js:107)
in RCTView (at View.js:34)
in View (at AppContainer.js:134)
in AppContainer (at renderApplication.js:40), js engine: hermes
If the current behavior is a bug, please provide the steps to reproduce and a minimal repository on GitHub that we can yarn install
and yarn test
.
- initialize fresh react-native 0.63.4
npx react-native init AwesomeTSProject --template react-native-template-typescript
- use upgrade-helper to upgrade to react-native 0.64.0
- remove any
import React from 'react';
from component file. - error will show
ReferenceError: Property 'React' doesn't exist
What is the expected behavior? As from React blog about New JSX Transform, it needs additional config in babel.config.js
// If you're using @babel/plugin-transform-react-jsx
{
"plugins": [
["@babel/plugin-transform-react-jsx", {
"runtime": "automatic"
}]
]
}
- After I add this into my babel.config.js and
yarn start --reset-cache
andyarn android
the error was gone.
Please provide your exact Metro configuration and mention your Metro, node, yarn/npm version and operating system.
- metro-react-native-babel-preset 0.64.0
- node 14.16.0
- yarn 1.22.5
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
}),
},
};
Issue Analytics
- State:
- Created 3 years ago
- Reactions:9
- Comments:13
Top Results From Across the Web
ReferenceError: Property 'React' doesn't exist after upgrade ...
I try to upgrade to 0.64.0 from 0.63.4 which include react 17 with the New JSX Transform.
Read more >firebase react native throws [ReferenceError: Property ...
I have managed to fix it. The demo project was the key (https://github.com/mikehardy/rnfbdemo) First I updated all my react native firebase ...
Read more >Upgrading to new versions
Upgrading to new versions of React Native will give you access to more APIs, views, developer tools and other goodies. Upgrading requires a ......
Read more >react-native-svg
react -native-svg provides SVG support to React Native on iOS, Android, macOS, Windows, and a compatibility layer for the web.
Read more >this can also happen when the js bundle is corrupt or there ...
ReferenceError : Property 'Component' doesn't exist, js engine: hermes ... It looks like the problem appeared after updating react native to version 0.64.0....
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Because,
metro-react-native-babel-preset
includes@babel/plugin-transform-react-jsx
by default. If you add it toplugins
, it would be duplicated. https://github.com/facebook/metro/blob/6cb3ec88f707b1beb78462be11195b5d496e3aad/packages/metro-react-native-babel-preset/src/configs/main.js#L59-L61But set
useTransformReactJSXExperimental: true
is not enough. To use new JSX transformation, you have to passruntime: 'automatic'
to@babel/plugin-transform-react-jsx
too (runtime
isclassic
by default). https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html#manual-babel-setupSo you might want to change your
babel.config.js
to:@jmfigueroa Your
presets
is in wrong format. If you want to pass options to a preset, you have to use the array syntax with:not
it makes babel think that you are using 2 presets
module:metro-react-native-babel-preset
{ 'useTransformReactJSXExperimental': true }