首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RefferenceError:找不到变量React

RefferenceError:找不到变量React
EN

Stack Overflow用户
提问于 2018-09-10 16:12:57
回答 2查看 5.9K关注 0票数 3

我不完全确定为什么会出现这个错误,因为react存在于node_modules中,并导入到引用的文件中

引用的App.js文件是这个文件

代码语言:javascript
复制
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importDefault(require("react"));
const unstated_1 = require("unstated");
const layouts_1 = __importDefault(require("./layouts"));
const App = () => (<unstated_1.Provider>
    <layouts_1.default />
  </unstated_1.Provider>);
exports.default = App;

这是TypeScript ^的输出。未转译的版本如下

代码语言:javascript
复制
import React from 'react'
import { Provider as StateProvider } from 'unstated'
import AppRoot from './layouts'

const App = () => (
  <StateProvider>
    <AppRoot />
  </StateProvider>
)

export default App

我的项目结构如下所示

代码语言:javascript
复制
packages/
  native-app/
    node_modules/
    ios
    index.js
    src/
      App.tsx
    dist/
      native-app/
        src/
          App.js
      server/
  server/

我觉得这可能与dist文件夹中的嵌套有关?我的主react原生index.js像这样导入应用程序

代码语言:javascript
复制
import { AppRegistry } from 'react-native'
import App from './dist/native-app/src/App'

AppRegistry.registerComponent('MyApp', () => App)

注意:这看起来像monorepo,但我没有使用任何像yarn workspaces或lerna的东西,软件包安装在每个文件夹中,即native-appserver,一些常见的devDependencies安装在packages所在的根文件夹中,如typescript,tslint和prettier。

项目使用以下tsconfig

代码语言:javascript
复制
{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs",
    "lib": ["es2017"],

    "removeComments": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "skipLibCheck": true,

    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "noImplicitThis": true,
    "alwaysStrict": true,

    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true
  },
  "exclude": [
    "scripts",
    "packages/native-app/dist",
    "packages/server/functions/dist"
  ]
}

和用于native-app的json包。

代码语言:javascript
复制
{
  "name": "skimitar-app",
  "version": "1.0.0",
  "description": "Skimitar app",
  "private": true,
  "dependencies": {
    "asq-react-native-device": "1.2.2",
    "asq-react-native-facebook-log-in": "1.1.0",
    "asq-react-native-google-sign-in": "1.2.0",
    "asq-react-native-sensors": "1.1.0",
    "react": "16.4.2",
    "react-native": "0.56.0",
    "react-native-firebase": "4.3.8",
    "react-native-svg": "6.5.2",
    "unstated": "2.1.1"
  },
  "devDependencies": {
    "@types/react": "16.4.13",
    "@types/react-native": "0.56.17"
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-10 16:48:51

将React与TypeScript一起使用时,请更改React导入语句,如下所示:

代码语言:javascript
复制
import * as React from 'react';

您还可以将tsconfig.json文件中的module选项更改为"es2015":

代码语言:javascript
复制
{
"compilerOptions": {
  "module": "es2015",
  ...
票数 15
EN

Stack Overflow用户

发布于 2019-07-16 09:03:09

可以避免使用‘…* as import’通过在tsconfig.json的‘compilerOptions’部分设置“allowSyntheticDefaultImports”:true

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52253598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档