React和ReactDOM核心对象
React与ReactDOM是react中核心对象,React为核心功能,ReactDOM提供对DOM的操作,以前的老版本中只有
React没有ReactDOM,新版本中分离出。
//程序的入口文件index.jsimport React from 'react';import ReactDOM from 'react-dom';//element表示元素或者节点,targetDOM表示目标节点ReactDOM.render(element,targetDOM)//用于将element(HTML片段),插入指定的 DOM 节点。version18.0import React from 'react';import ReactDOM from 'react-dom/client';const root = ReactDOM.createRoot(targetDOM);root.render(element)//用于将element(HTML片段),插入指定的 DOM 节点。
什么是JSX?
js文件中类似于HTML标签的部分就是一个JSX。
JSX是Facebook 团队提出的一个语法方案,可以在JavaScript的代码直接中使用 HTML 标签来编写 JavaScript 对象。其使用的是 XML-like 语法,这种语法方案需要通过babel来进行编译转换成真实可用的 JavaScript 代码
React 是基于组件的开发思想,React 认为一个组件可以是一个完全独立的没有任何其他依赖的模块文件。一个组件 中可以有自己的样式(Inline Style)和结构(JSX编写的HTML)
面试题JSX和html一样吗,它们之间有什么关联?
vue中template中的html标签和JSX类似,底层也是通过Vue.createElement创建的虚拟DOM
- 浏览器中的DOM,则通过document.createElement创建
jsx表达式(jsx模板插值)
在jsx我们可以利用jsx的插值语法,来插入动态的表达式,jsx中的插值语法非常简单,一对花括号即可{}
什么是表达式?一般我们认为凡是具有返回值的js语句就是一个表达式,例如一个函数或者一个变量。let name = '张三';//jsx<p>我叫: {name}</p>
而像if..else/switch等,则不是,以为他们没有返回值,他们是流程控制语句jsx使用注意事项
每个jsx对象最外层必须有个根标签
const a = <div><p>测试</p></div>或者const b = <><p>测试</p></>//推荐用后者,因为<>只是占位,不会真的生成一个标签
在jsx里面绑定事件注意要用驼峰命名 ,比如
<div onClick={this.clickTest}></div>- 在jsx中添加类名的时候,注意要用className ,比如
<div className="test"></div> - 添加行内样式的时候,style属性接受的是一个对象,比如
<div style={ {color:'red'} }>测试</div>在jsx中使用语句
条件判断
```javascript //写法 一 const Component = () => { return n%2===0 ?n是偶数: n是奇数 //就像 js 一样可以使用判断 }
//写法 二 //如果需要外面的 div const Component = () => { return (
//写法三
const Component = () => { const inner = n%2===0 ?
//写法四 const Component = () => { const content = (
//写法五 const Component = () => { let inner if (n%2===0) { inner =
<a name="UVWQl"></a>### 循环```javascript//写法一const Component = (props) => {return props.numbers.map( (n,index)=>{ return <div> 下标:{index},值为:{n}</div> } )}//写法二//如果需要外面的 divconst Component = (props) => {return(<div>{props.numbers.map((n,index)=>{ return <div> 下标:{index}值为:{n}</div>})}</div>)}//写法三const Component = (props) => {const array = []for(let i=0;i<props.numbers.length;i++){array.push(<div>下标{i}值{props.numbers[i]</div>)}return <div>{ array }</div>}
总结
- 引入React和ReactDOM
- CDN方式
- react.js
- react-dom.js
- babel.js (jsx语法转换)
- 直接
import React from 'react'
- CDN方式
React.createelement- 创建虚拟DOM对象
- 函数的作用:多次创建虚拟DOM对象
- DOM diff:对比不同的算法
- jsx
- 将XML转译为
React.createelement - 使用
{}插入JS代码 - 使用
create- react-app默认将JS当作JSX处理 - 条件判断、循环要用原生JS实现
- 将XML转译为
