javascript - React 元素类型无效 - 传递 Prop 时出现 ES6 解构语法错误

标签 javascript reactjs react-native ecmascript-6

<分区>

我正在构建一个 React 应用程序并尝试更新一些 JavaScript 函数以使用 ES6 解构箭头语法。

Index.js 文件:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';

function TestMe() {
  const name = "User";
  const message = "Welcome!";
  return (
    <div>
      <Hello name={name} />
      <Message message={message} />
    </div>
  );
}

ReactDOM.render(<TestMe/>, document.querySelector('#root'));

const Hello = ({ name }) => (
    <span>Hello, {name}</span>
);

function Message(props) {
  return (
    <div className="message">
      {props.message}
    </div>
  );
}

Message 函数将呈现,但 Hello 函数会在浏览器中抛出以下错误(成功构建后):

""" 元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件)但得到:未定义。您可能忘记从定义它的文件中导出您的组件,或者您可能混淆了默认导入和命名导入。

检查TestMe 的渲染方法。 """

这是我的 package.json,以防万一:

{
  "name": "jsx-exercises",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "eslint": "^5.6.0",
    "react": "^16.7.0",
    "react-dom": "^16.7.0",
    "react-scripts": "2.1.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}

为什么会出现此错误?

最佳答案

Javascript 中的声明被“提升”,这意味着它们可以在整个范围内访问,甚至在它们被声明之前。如果您使用函数声明,则初始化也会在作用域开始时发生:

 { // scope begins
   a();
   function a() { }
 } // scope ends

现在变量只能在初始化后访问:

 setTimeout(() => console.log(a)); // 1
 console.log(a); // undefined
 var a = 1;

在您的情况下,您在 Hello 初始化之前访问它。


有趣的事实:在初始化发生之前访问用 letconst 声明的变量会抛出 SyntaxError(有充分的理由,q.e.d.)所以人们可以看到你的构建管道将 const 替换为 var 以支持旧版浏览器。

关于javascript - React 元素类型无效 - 传递 Prop 时出现 ES6 解构语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53970407/

相关文章:

android - 从 SMS REACT NATIVE 读取消息

javascript - 如何使用 Fontawesome 复选框格式化程序从免费 jqgrid 中发布的行中删除操作按钮

javascript - 在 jquery 中访问动态加载的数据

javascript - 如何使用 jQuery n json 动态编写 HTML 标签?

javascript - 插入失败 : Method in meteor 1. 3 并使用react

react-native - 无法使用 native-base 解析模块

javascript - 如何从集合中获取模型

reactjs - React.memo 性能比 React.PureComponent 差

javascript - 当我长时间滑过最后一张幻灯片时,Swiperjs 重置到上一张幻灯片

react-native - Proguard应用程序崩溃(由: java. lang.NoSuchFieldError引起:否“Lcom/facebook/jni/HybridData)