• 【JAVASCRIPT】React学习-JSX 语法


    摘要

    react 学习包括几个部分:

    • 文本渲染
    • JSX 语法
    • 组件化思想
    • 数据流

    JSX 语法

    1. 定义

    JSX 是javascript + xml 的合集,我们可以将javascript 与 html 一起编写, 封装页面组件的html 格式与业务逻辑。但使用 JSX 时,一定要编写成能精确定义和反应组件及属性的树状结构,避免无法解析,虽然目前还没遇到过无法解析的情形。

    2. 如何区分javascript 与 xml

    JSX 代码中 以 {} 包含的为 javascript 代码, <> 包含的为 html 代码,解析时采用对应的语法解析器

    3. React 模块

    约定分别使用首字母大、小写来区分本地模块的类和 HTML 标签。

    1. html 标签,JSX 中以小写字母开头
    2. react 组件,JSX 中以大写字母开头
    <body>
        <div id="HelloWorld"></div>
        <div id="HelloWorld1"></div>
    </body>
    <script src="../build/react.js"></script>
    <script src="../build/JSXTransformer.js"></script>
    <script type="text/jsx">
        var hw = <div>hello,world</div>;
        var HelloWorld = React.createClass({
            clickHandler: function() {
                console.log(this.props);
                console.log('yes, click event has been fired!');
            },
            render: function() {
                return (
                    <p onClick={this.clickHandler}>
                        你好,{this.props.name}, 欢迎大驾光临!
                    </p>
                );
            }
        });
    
        React.render(
            <HelloWorld name={'huxiaoyun'} />,
            document.getElementById('HelloWorld')
        );
    
        React.render(
            hw,
            document.getElementById('HelloWorld1')
        );
    </script>
    

    4. html 属性

    自定义属性采用data 开头, 比如 data-index 表示此dom 节点的序列号

    5. 注意点

    • 前面的代码都用了JSXTransformer.js,发布时一定要提前编译为javascript,可安装 react-tools 进行转化,自动化工具也可使用gulp 对应的插件gulp-react

    • JSX 其实是一种语法糖,它将JSX 代码翻译成javascript,某些情况无法实现,如下面

    <body>
        <div id="HelloWorld"></div>
    </body>
    <script src="../build/react.js"></script>
    <script src="../build/JSXTransformer.js"></script>
    <script type="text/jsx">
        var a = true;
        // 不正确写法,暂不知道原因
        // var helloWorld = <div id=if (a) { 'success'} else { 'fail'}>hehehe</div>;
        // var helloWorld = <div>{if (a) <div id='success'>Hello World!</div> else <div>Hello World!</div>}</div>;
        // 正确写法
        var helloWorld = <div>{a ? <div id='success'>Hello World!</div> : <div>Hello World!</div>}</div>;
        React.render(
            helloWorld,
            document.getElementById('HelloWorld')
        );
    </script>
    
    • 不支持某些html 属性,如 class for , JSX 中替换为 className htmlFor

    • JSX 大小写敏感
      比如 onClick 如果写成 onclick 是无法触发事件的

    <body>
        <div id="HelloWorld"></div>
    </body>
    <script src="../build/react.js"></script>
    <script src="../build/JSXTransformer.js"></script>
    <script type="text/jsx">
        var HelloWorld = React.createClass({
            clickHandler: function() {
                console.log(this.props);
                console.log('yes, click event has been fired!');
            },
            render: function() {
                return (
                    <p onClick={this.clickHandler}>
                        你好,{this.props.name}, 欢迎大驾光临!
                    </p>
                );
            }
        });
    
        React.render(
            <HelloWorld name={'huxiaoyun'} />,
            document.getElementById('HelloWorld')
        );
    </script>
    
    • 行内样式时不能采用引号的书写方式,正确方式如下
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>行内样式</title>
        <style type="text/css">
            .big {
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div id="HelloWorld"></div>
    </body>
    <script src="../build/react.js"></script>
    <script src="../build/JSXTransformer.js"></script>
    <script type="text/jsx">
        var HelloWorld = React.createClass({
            render: function() {
                return (
                    <p style={{color:'red'}} className="big">
                        你好,{this.props.name}, 欢迎大驾光临!
                    </p>
                );
            }
        });
    
        React.render(
            <HelloWorld name={'huxiaoyun'} />,
            document.getElementById('HelloWorld')
        );
    </script>
    
    • html 格式文本展示,举个例子:
    <body>
        <div id="HelloWorld"></div>
    </body>
    <script src="../build/react.js"></script>
    <script src="../build/JSXTransformer.js"></script>
    <script type="text/jsx">
        var HelloWorld = React.createClass({
            render: function() {
                return (
                    <p>
                        你好,{this.props.name}, 欢迎大驾光临!
                    </p>
                );
            }
        });
        // 转义
        // var content = <div>huxiaoyun</div>;
        // 不转义,作字符串输出
        var content = '<div>huxiaoyun</div>';
        React.render(
            <HelloWorld name={content} />,
            document.getElementById('HelloWorld')
        );
    </script>
    
    计划、执行、每天高效的活着学着
  • 相关阅读:
    Open source physics engine
    Free Platformers: Open Source Gamers Guide to Free Games
    安装路由后,显示已连接,却上不了网?
    http://blog.csdn.net/duanbeibei/article/details/5890436
    javascript权威指南 第8章 笔记2 Kevin
    javascript权威指南 第9章 笔记 Kevin
    javascript权威指南 笔记2 Kevin
    .Net 登录窗口 Kevin
    C# 中读XML时haschrildnodes方法老为true Kevin
    javascript权威指南 第8章 笔记 Kevin
  • 原文地址:https://www.cnblogs.com/huxiaoyun90/p/4783689.html
Copyright © 2020-2023  润新知