react-02-JSX-插值-v-if-v-for

简介: react-02-JSX-插值-v-if-v-for

1.JSX语法规则


1.遇到<>html形式进行解析

  1. 遇到{}js形式进行解析


2.基础模板分析



// JSX创建的DOM :也叫虚拟DOM
    //  理解:  <h1>hello react</h1>  看做一个对象类型的变量
    //   1. 只保存了DOM的信息 还是虚拟的
    //最外层只有一个容器  不要忽略闭合标签
    // ():可以包裹JSX语法 可以换行 缩进
    var element = (
      <div>
        <h1>hello react</h1>
        <p> 你好</p>
      </div>
    );
    console.log(element); //假的 只是把信息存了 还没有创建它
    //    显示一个对象的所有属性和方法
    console.dir(app); //真的
    // 2. 通过JSX 信息 绘制真正的DOM  render
    ReactDOM.render(element, app); // 会覆盖之前的box内容



3.插值



var name = "yzs"
    var age = 10
    var element = (
      <div>
        <h1>hello react</h1>
        <p> 你好</p>
    {/*  注意注释的写法   
       {变量名}  注意不要习惯直接写成2层{{}}
    */}
        <p>{name}</p>
        <p>{"名字:"+name}</p>
        <p>年龄:{ 10+ 18}</p>
      </div>
    );



4.v-if 替代     用的是短路 &&   ||



{/*undefined null  false 不会显示 这些特点可以代替某些v-if的操作 */}
            <p>{undefined && "易经"}</p>
            <p> {age > 18 && "成年人"}</p>
            <p>{age > 5 ? <b>成立</b> : <b>不成立</b>}</p>

1.复杂的布局也会单独声明布局对象 ,用来切换显隐更真实


5. v-for 替代 方案


5.1 数组直接展开

react中数组会自动展开


// 实现类似vue-for指令效果
    var numbers = [
      <h1 key="1" className="test-c">
        vue
        </h1>,
      <h2 key="2">react</h2>,
      <p key="3">angular</p>
    ];
   ReactDOM.render(
      <div>
         {["react", "vue", "小程序"]}
        {/* 数组可以自动展开显示*/}
        {numbers}
        {/* 对象不能直接解析*/}
      </div>,
      app
    );

1.JSX 布局直接写个 数组会自动展开

2.数组直接装JSX 布局对象,自动展开

3.key 和vue中key一样 用于虚拟DOM 的diff计算

5.2数组map遍历

1.这里不使用forEach是 因为forEach没有返回值

2.map 不修改原数组 而且返回新数组


var newsArr = [
            { url: "https://www.jianshu.com/u/5b862adfdb97", content: "天行健,君子以自强不息;" },
            { url: "https://www.jianshu.com/u/5b862adfdb97", content: "地势坤,君子以厚德载物" }
        ]


<div>
                <ul>{
                       newsArr.map((item, index) => {
                         return (
                               <li key={index}> <a href={item.url}>{item.content}</a> </li>
                          )
                        })
                    }
                    </ul>
                </div>


5.3 优化

1.布局一般不写逻辑对比vue template


// 服务器获取的数据结构
        let persons = [
            { name: "yzs", description: "郑州" },
            { name: "Vue", description: "尤雨溪 尤大" },
            { name: "react", description: "FaceBook" },
            { name: "Angular", description: "goole" },
            { name: "小程序", description: "鹅厂" }
        ]
        let MyList = persons.map((item, index) => {
            return <li key={index} className="test">
                <h1>{item.name}</h1>
                <p>{item.description}</p>
            </li>
        })
//  ***********************布局   
        let element = (
            <div>
                <ul>
                    {MyList}
                </ul>
            </div>
        )
        ReactDOM.render(element, app)



6.JSX编译原理


其实了解vuerender函数的,这里应该也非常easy


// var html = <div id="box"> hello</div>
        // 注意这里是 React 那个核心文件的内容
        // var html = React.createElement("div",{id:"box"},"hello")
        // 多个节点 就是数组
        var html = React.createElement("div", { id: "box" },
            [React.createElement("strong", { key: 1 }, "hello")],
            [React.createElement("span", { key: 2 }, "span")])
        ReactDOM.render(<div>
            {html}
        </div>, app)




相关文章
|
1月前
|
XML 前端开发 JavaScript
react中JSX的详解
react中JSX的详解
24 2
|
1月前
|
前端开发 JavaScript 安全
react为什么要使用JSX
react为什么要使用JSX
43 1
|
11月前
|
XML JavaScript 前端开发
react总结之jsx是什么,jsx语法规则
react总结之jsx是什么,jsx语法规则
|
12月前
|
JavaScript
如何在 vue3 中使用 jsx/tsx?(上)
如何在 vue3 中使用 jsx/tsx?(上)
363 0
|
1月前
|
前端开发 JavaScript
react JSX是什么,作用是什么
react JSX是什么,作用是什么
49 0
|
1月前
|
存储 JavaScript 前端开发
原生js vue react通用的递归函数
原生js vue react通用的递归函数
28 0
|
9月前
|
存储 前端开发 JavaScript
React | React的JSX语法(二)
React | React的JSX语法(二)
React | React的JSX语法(二)
|
9月前
|
XML 前端开发 JavaScript
React | React的JSX语法(一)
React | React的JSX语法 React | React的JSX语法(一)
|
资源调度 前端开发 JavaScript
Vue3中的jsx的简单体验,在vue3中使用jsx语法
Vue3中的jsx的简单体验,在vue3中使用jsx语法
|
JavaScript 前端开发
实现 Toy-React , 实现 JSX 渲染(上)
实现 Toy-React , 实现 JSX 渲染
70 0