Hello,React & jsx语法规则

一、Hello React

  1. 为什么用jsx不用js?
  • 标签嵌套下,如h1嵌套span,js写虚拟dom时过于麻烦,jsx比较流畅,jsx经过babel编辑过后,生成的就是js代码。
// js创建虚拟dom
const VDOM = React.createElement("h1", { id: "title" }, React.createElement('span',{},'hello,React'));
// jsx创建虚拟dom
const VDOM = (
  <h1 id="title">
    <span>hello,React</span>
  </h1>
); /*此处不能写引号,因为不是字符串*/
  1. 关于虚拟DOM
  • 虚拟DOM本质是Object类型的对象(一般对象)
console.log(VDOM) // > object props、ref、type、id...
console.log(typeOf VDOM) // object
console.log(VDOM instanceof Object) // true
  • 虚拟DOM挂载的API较少,真实DOM挂载的API较多(通过debugger断点可以看到),虚拟DOM是React内部在使用,无需真实DOM上那么多属性
// 真实DOM
const TDOM = document.getElementById("test");
debugger // 查看TDOM accessKey、align、baseURI等等几十个
console.log(TDOM); 
  • 虚拟DOM最终会被React转化为真实DOM,渲染到页面上

二、JSX语法规则

  • jsx全称javaScript XML(XML早期用于存储和传输数据(像微信服务器和开发者服务器之间还是用XML,后来有了json方式存储)
// XML
<student>
    <name>张三</name>
    <age>18</age>
</student>
  • react定义的一种类似于XML的js扩展语法:js+XML
<script type="text/babel">
  const id = "vdom";
  const data = "hello,React";
  /**
   * jsx语法规则:
   * 1.定义虚拟DOM时,不要写引号,因为不是写字符串
   * 2.标签中混入js表达式时,要使用花括号{}
   * 3.样式的类名指定时,不要用class,用className
   * 4.内联样式需要写双花括号{{}},外层花括号代表里面要写js表达式,里层花括号代表写的是一个对象key:value,类似于font-size属性,需要驼峰命名fontSize
   * 5.jsx(虚拟DOM)不能有多个根标签,只能有一个,外层最好用div包裹,标签必须闭合
   * 6.标签首字母,(1.如果小写字母开头,jsx最终编译成html,会找同名元素,找不到就报错。(2.大写字母开头,react就会渲染对应组件,组件未定义情况下,就报错。
  */
  const VDOM = (
    <h1 id={id}>
      <span style={{color:'white'}}>{data}</span>
    </h1>
    // <input type="text"> x 只能有一个根标签
  );
  //2. 渲染虚拟dom到页面
  ReactDOM.render(VDOM, document.getElementById("test"));
</script>

只能有一个根标签 √

<script type="text/babel">
  const id = "vdom";
  const data = "hello,React";
  const VDOM = (
    <div>
      <h1 id={id}>
        <span style={{color:'white'}}>{data}</span>
      </h1>
      <input type="text" />
    </div>
  );
  ReactDOM.render(VDOM, document.getElementById("test"));
</script>
  • 本质是React.createElement(component,props,…children)方法的语法糖
  • 作用:用来简化创建虚拟DOM
  • 标签名任意:HTML标签或其他标签
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值