我对React和JSX相当新,但我的印象是你可以将JSX保存为几乎任何东西(var,const,let ......) .
但是,当我将它保存为const并尝试渲染它时:
import React from 'react';
import ReactDOM from 'react-dom';
const Test = <div> hi </div>;
ReactDOM.render((
<div>
<Test />
</div>
), document.getElementById('root'));
我收到错误消息:
React.createElement:type无效 - 期望一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:object .
当我用以下内容替换测试const时:
const Test = () => { return( <div> hi </div> ) };
它没有问题 . 为什么我不能使用第一个版本?
4 回答
你没有创建React.Component
所以你不能用
<Test \>
实例化它 . 如果将渲染更改为它会工作 . 有关如何创建React.Component的信息,请参阅React guide .
你可以使用第一个,但在这种情况下它不是一个React组件,它只是一个引用创建
div
的结果的变量,所以渲染它像这样:或者,要使其成为无状态功能组件(SFC),请将其写为返回
div
的函数:然后你可以将它用作
<Test />
.有关JSX的更多详细信息,请查看 DOC .
轻松理解这一点 - look at what the JSX compiles into:
您正在将已创建的元素实例再次传递给
createElement
函数 - 相反,您只需渲染现有实例:Which compiles to this:
Test
不是组件,因此您需要使用{Test}
而不是<Test />
渲染它