一、原生js操作dom
<ul id="list"></ul>
<script>
let personArr=[
{id: "001",name:"messi",age:18},
{id: "002",name:"kobe",age:19}
];
let htmlStr="";
personArr.forEach((person)=>{
htmlStr+=`<li>${person.name}-${person.age}</li>`;
})
document.getElementById("list").innerHTML=htmlStr;
</script>
二、react实现hello world
- 第一步:按顺序引入依赖
<!-- 引入react核心库 -->
<script src="../依赖/react.development.js"></script>
<!-- 引入raect-dom用于支持raect操作dom -->
<script src="../依赖/react-dom.development.js"></script>
<!-- 引入babel 用于将jsx转换为js -->
<script src="../依赖/babel.min.js"></script>
-
第二步:将type类型写为babel表示标签内写的是jsx
<script type="text/babel">
-
第三步:书写jsx
- 创建虚拟dom
const VDOM=<h1>hello,react</h1>;
- 渲染虚拟dom到页面
render(要渲染的虚拟DOM,容器),表示要把哪一个虚拟DOM渲染到哪个容器里
ReactDOM.render(VDOM,document.getElementById("test"));
- 创建虚拟dom
三、创建虚拟dom的两种方式
- jsx创建虚拟dom
<script type="text/babel">
const VDOM=(
<h1 id="title">
<span>hello,react</span>
</h1>
);
ReactDOM.render(VDOM,document.getElementById("test"));
</script>
- js创建虚拟dom
<script>
//createElement(标签名,标签属性,标签内容)
const VDOM=React.createElement("h1",{id:"title"},React.createElement("span",{},"hello,react"));
ReactDOM.render(VDOM,document.getElementById("test"));
</script>
四、虚拟dom与真实dom
- 关于虚拟dom
1.虚拟dom本质是Object类型的对象(一般对象)
2.虚拟dom比较“轻”,真实dom比较重,因为虚拟dom是react内部再用,无需真实dom上那么多属性
3.虚拟dom最终会被react转化为真实dom,呈现在页面上
<div id="test"></div>
<div id="test2"></div>
...
<script type="text/babel">
const VDOM=(
<h1 id="title">
<span>hello,react</span>
</h1>
);
ReactDOM.render(VDOM,document.getElementById("test"));
var TDOM=document.getElementById("test2");
console.log("虚拟dom",VDOM);//虚拟dom Object
console.log("真实dom",TDOM);//<div id="test2"></div>
console.log(VDOM instanceof Object);//true
</script>
执行语句console.log("虚拟dom",VDOM)
输出:
执行语句console.log(VDOM instanceof Object)
输出true
执行语句console.log("真实dom",TDOM)
输出:
五、jsx语法规则
jsx语法规则
- 定义虚拟DOM时,不要写引号
- 标签中混入JS表达式时要用
{}
- 样式的类名指定不要用
class
,要用className
- 内联样式,要用
style={{key:value}}
的形式去写 - 只能写一个根标签
- 标签必须闭合
- 标签首字母
- 若小写字母开头,则将该标签转为html中同名元素,若html中没有改标签对应的同名元素,则报错
- 若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错
<div id="test"></div>
<script type="text/babel">
const myId="Dexter";
const myData="hello,REACT";
const VDOM=(
<div>
<h2 className="title" id={myId.toLowerCase()}>
<span style={{color:"black",fontSize:"20px"}}>{myData.toLowerCase()}</span>
</h2>
<h2 className="title" id={myId.toUpperCase()}>
<span style={{color:"blue",fontSize:"20px"}}>{myData.toLowerCase()}</span>
</h2>
<input type="text"/>
</div>
);
ReactDOM.render(VDOM,document.getElementById("test"));
</script>
<script type="text/babel">
const data=["Angular","React","Vue"];
const VDOM=(
<div>
<h1>前端js框架列表</h1>
<ul>
{
data.map((item,index)=>{
return <li key={index}>{item}</li>
})
}
</ul>
</div>
);
<script/>
网友评论