• 技术文章 >web前端 >js教程

    react中什么必须大写

    青灯夜游青灯夜游2020-11-30 14:34:36原创1231

    react中组件名称的首字母必须要用大写。原因:React中使用JSX语法,但浏览器无法识别JSX语法,需通过babel对JSX语法进行转义;而如果组件的首字母为小写时,其会被认定为原生DOM标签,创建一个不存在的标签是会报错的。

    大前端零基础入门到就业:进入学习

    本教程操作环境:windows7系统、react16版,该方法适用于所有品牌电脑。

    react组件名称的首字母一定要用大写

    错误的写法: 组件首字母没有大写

    function clock(props){  
     return (
        <p>
          <h1>现在的时间是{props.date.toDateString()}</h1>
        </p>
     ) }

    错误的写法会导致页面无法显示内容且报错,但又可以通过f12查看到标签以一种比较奇怪的方式存在,

    在这里插入图片描述

    正确的写法:

    function Clock(props){  
     return (
        <p>
          <h1>现在的时间是{props.date.toDateString()}</h1>
        </p>
     ) }

    那究竟是为什么呢?

    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中又没有这个元素,所以导致以一种比较奇怪的方式存在

    在这里插入图片描述

    更多编程相关知识,请访问:编程教学!!

    以上就是react中什么必须大写的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:react 组件
    上一篇:jquery如何判断数组包含指定元素 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• react子组件怎么向父组件传值?• react中monent如何获取日期?• react子向父通信有哪些方法?• react有哪些ui框架?
    1/1

    PHP中文网