React 入门:JSX

文章目录

  • JSX介绍
  • JSX语法规则
  • JSX练习

JSX介绍

  • 全称:JavaScript XML。

  • react 定义的一种类似于 XML 的 JS 扩展语法:JS + XML。

  • 本质是 React.createElement(component, props, ...children)方法的语法糖。

  • 作用:用来简化创建虚拟 DOM

    • 写法: var ele =

      Hello JSX!

    • 注意 1:它不是字符串,也不是 HTML/XML 标签。

    • 注意 2:它最终产生的就是一个 JS 对象。

  • 标签名任意:HTML 标签或其他标签。

JSX语法规则

  • 定义虚拟 DOM 时,不要写引号;
  • 标签中混入 JS 表达式时要用 {} 包起来(一定要区分【js 语句(代码)】与【js 表达式】);
    • 什么是表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方。
    • js 中表单式的情况:
      • a
      • a + b
      • demo(1)
      • arr.map()
      • function text() {}
    • 语句(代码):
      • if(){}
      • for(){}
      • switch(){}
  • 标签的样式类名指定不能用 class(因为 class 与 ES6 中声明类的关键字 class 冲突),要用 className;
  • 内联样式要用 style={{key:value}} 的形式去写,如果 key 包含连字符(如”font-size”),需要按照小驼峰形式来写(如 fontSize);
  • 只能有一个根标签;
  • 标签必须闭合;
  • 标签首字母:
    • 若小写字母开头,则将该标签转为 html 中同名元素,若 html 中无该标签对应的同名元素,则报错;
    • 若大写字母开头,React 就去渲染对应的组件,若组件没有定义,则报错。

JSX练习

结合上面总结的 JSX 的语法规则,阅读并运行下面的示例代码,以加深理解。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>jsx语法规则</title>
    <style>
        .sub-title {
            color: #595959;
            padding: 0;
            margin: 0;
            font-size: 12px;
        }
    </style>
</head>

<body>
    <!-- 准备好一个容器 -->
    <div id="app"></div>

    <!-- step01: 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- step02: 引入react-dom,用于支持react操作DOM -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- step03: 引入babel,用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel"> /* 此处一定要写babel */
        // 1.创建虚拟DOM
        const myId = 'todo-list';
        const title = 'Todo List';
        const subTitleClass = 'sub-title';
        const myTodoList = [
            {id: 1, title: '9:30 参加部分晨例会'},
            {id: 2, title: '10:30 参加XXXX项目产品需求评审'},
            {id: 3, title: '16:30 提交XXXX项目开发计划'},
        ];

        const VDOM = (
            <div>
                <h2 className="title" id={myId.toLowerCase()}>
                    <span style={{ color: 'red', fontSize: '28px' }}>{title.toUpperCase()}</span>
                </h2>
                <p className={subTitleClass}>这是一个简单的 Todo List。</p>
                <input type="text" placeholder="请输入……" style={{height: '28px', lineHeight: '28px', padding: "0 10px"}} />
                <button style={{marginLeft: '10px', height: '32px', lineHeight: '32px'}}>提交</button>
                <h4 className={subTitleClass} style={{marginTop: '20px'}}>我的待办</h4>
                <ul style={{fontSize: '12px', listStyle: 'none'}}>
                    {
                        myTodoList.map((item, index) => {
                            return <li key={index}> {item.id}. {item.title}</li>
                        })
                    }    
                </ul>
            </div>
        )
        // 2.渲染虚拟DOM到页面
        ReactDOM.render(VDOM, document.getElementById('app'))
    </script>
</body>

</html>

上面的示例代码,纯粹为了验证 JSX 的语法规则,所以没按照严格意义上的代码规范来写。
运行结果如下:
React 入门:JSX_第1张图片

你可能感兴趣的:(React,学习实战笔记,react.js,javascript,前端)