您好,欢迎访问一九零五行业门户网

react组件首字母必须大写吗

react组件首字母必须大写;因为react根据首字母是否大写来区分是react组件还是dom元素。react中使用jsx语法,但浏览器无法识别jsx语法,需通过babel对jsx语法进行转义;而如果组件的首字母为小写时,其会被认定为原生dom标签,创建一个不存在的标签是会报错的。
本教程操作环境:windows7系统、react18版、dell g3电脑。
在react中声明组件时组件名的第一个字母必须是大写吗?为什么?
必须,react根据首字母是否大写来区分是react组件还是dom元素。
之前在写react遇到过这样的报错
warning: the tag is unrecognized in this browser. if you meant to render a react component, start its name with an uppercase letter.in app (at src/index.tsx:6)
这是因为react组件没有大写导致的。
react中使用jsx语法,但浏览器无法识别jsx语法,需通过babel对jsx语法进行转义;而如果组件的首字母为小写时,其会被认定为原生dom标签,创建一个不存在的标签是会报错的。
原理:jsx语法 向 真实dom的转换
我们在 react 中都是写的 jsx语法,从 jsx语法 到页面上的 真实dom大概需要经历以下几个阶段:jsx语法 —> 虚拟dom(js对象) —> 真实dom。
因为浏览器是无法识别jsx语法的,因此我们需要通过 babel 对jsx语法进行转义,然后才能生成虚拟dom对象,而原因就是在这里。我们可以看一下babel是如何转义jsx语法的:
babel在进行转义jsx语法时,是调用了 react.createelement() 这个方法,这个方法需要接收三个参数:type, config, children。第一个参数声明了这个元素的类型。
对比上面两张图,图一中,我在创建自定义组件时没有首字母大写。 而 babel 在转义时把它当成了一个字符串 传递进去了;图二中,我把首字母大写了,babel 在转义时传递了一个变量进去。
问题就在这里,如果传递的是一个字符串,那么在创建虚拟dom对象时,react会认为这是一个简单的html标签,但是这显然不是一个简单的html标签,因此去创建一个不存在的标签肯定是会报错的。
如果首字母大写,那么就会当成一个变量传递进去,这个时候react会知道这是一个自定义组件,因此他就不会报错了。
所以:
同理,上述错误的写法因为是小写,所以babel就把clock当作是标签生成了,而html中又没有这个元素,所以导致以一种比较奇怪的方式存在
【相关推荐:redis视频教程】
以上就是react组件首字母必须大写吗的详细内容。
其它类似信息

推荐信息