当前位置: 移动技术网 > IT编程>开发语言>JavaScript > react-jsx语法

react-jsx语法

2020年01月16日  | 移动技术网IT编程  | 我要评论
JSX语法 1. 如要要使用 JSX 语法,必须先运行 ,然后再 中添加 语法配置; 2. JSX语法的本质:还是以 React.createElement 的形式来实现的,并没有直接把 用户写的 HTML代码,渲染到页面上; 3. 如果要在 JSX 语法内部,书写 JS 代码了,那么,所有的JS代 ...

jsx语法

  1. 如要要使用 jsx 语法,必须先运行 cnpm i babel-preset-react -d,然后再 .babelrc 中添加 语法配置;
  2. jsx语法的本质:还是以 react.createelement 的形式来实现的,并没有直接把 用户写的 html代码,渲染到页面上;
  3. 如果要在 jsx 语法内部,书写 js 代码了,那么,所有的js代码,必须写到 {} 内部;
  4. 当 编译引擎,在编译jsx代码的时候,如果遇到了<那么就把它当作 html代码去编译,如果遇到了 {} 就把 花括号内部的代码当作 普通js代码去编译;
  5. 在{}内部,可以写任何符合js规范的代码;
  6. 在jsx中,如果要为元素添加class属性了,那么,必须写成classname,因为 class在es6中是一个关键字;和class类似,label标签的 for 属性需要替换为 htmlfor.
  7. 在jsx创建dom的时候,所有的节点,必须有唯一的根元素进行包裹;
  8. 如果要写注释了,注释必须放到 {} 内部
var myh1 = react.createelement('h1', null, '这是一个大大的h1')
var mydiv = react.createelement('div', { title: 'this is a div', id: 'mydiv' }, '这是一个div', myh1)

由于,react官方,发现,如果直接让用户手写 js 代码创建元素,用户会疯掉的,然后,用户就开始寻找新的前端框架了,于是,
react 官方,就提出了一套 jsx 语法规范,能够让我们在 js 文件中,书写类似于 html 那样的代码,快速定义虚拟dom结构;
问题: jsx(符合 xml 规范的 js 语法)的原理是什么???
注意: 千万要记住,哪怕你在 js 中可以写 jsx 语法了,但是,jsx内部在运行的时候,也是先把 类似于html 这样的标签代码,
转换为了 react.createelement 的形式;
也就是说:哪怕我们写了 jsx 这样的标签,也并不是直接把 我们的 html 标签渲染到页面上,而是先转换成 react.createelement 这样的js代码,再渲染到页面中;(jsx是一个对程序员友好的语法糖)

如果要直接使用 jsx 语法,需要先安装相关的 语法转换工具
运行 cnpm i babel-preset-react -d

var mytitle = '这是使用变量定义的 tilte 值'

var arr = []
for (var i = 0; i < 10; i++) {
  var p = <p classname="myp" key={i}>但是,你知道它的本质吗???</p>
  arr.push(p)
}
var mydiv = <div>
  这是使用 jsx 语法创建的div元素
  <h1 title={mytitle + 'aaaaa'}>哈哈哈,jsx真好用啊</h1>
  <p classname="myp">但是,你知道它的本质吗???</p>
  <label htmlfor=""></label>

  {arr}

  /* 这是多行注释,你肯定看不到我 */
  { 
    // zheshi zhushi 
  }

  { /* 这是注释 */ }
  {/* 1234 */}
/* 注释也必须用{}括起来*/
</div>


reactdom.render(mydiv,document.getelementbyid('app'))
// var name = 'zs'
// var age = 20
var person = {
  name: 'ls',
  age: 22,
  gender: '男',
  address: '北京'
}

// 注意: reactdom.render() 方法的第二个参数,和vue不一样,不接受 "#app" 这样的字符串,而是需要传递一个 原生的 dom 对象
reactdom.render(<div>
  {/* <hello name={person.name} age={person.age} gender={person.gender} address={person.address}></hello> */}

  <hello {...person}></hello>
</div>, document.getelementbyid('app'))

// 注意:这里 ...obj  语法,是 es6中的属性扩散, 表示,把这个对象上的所有属性,展开了,放到这个位置

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网