React入门(一)
虚拟dom (virtual document object model)
- dom和虚拟dom的区别
- dom是由浏览器中的js提供功能,所以只能人为使用浏览器提供的api来操作dom对象
- 虚拟dom不是由浏览器提供的,是程序员 用js对象来模拟页面上的dom和dom嵌套
- 虚拟dom的优点
- dom节点的高效更新
diff算法
- tree diff:新旧dom树逐层对比
- component diff:对比每一层的时候,组件之间的对比
- element diff:在组件中的元素之间的对比
- key:页面上的dom节点和虚拟dom中的对象关联
新建react项目
-
下载安装包并导入
npm i react react-dom -s
-
使用js创建虚拟dom节点,并渲染到指定节点中
import react from 'react';
import reactdom from 'react-dom';
// react中若要创建dom元素,只能使用react提供的js api
// createelement 接收三个及以上参数,
// 参数1 :字符串,表示创建的元素类型, 参数二:对象,元素属性,参数三~n:虚拟dom对象,子节点
// <div class="ttt" id="mydiv">这是一个div</div>
var mydiv1 = react.createelement('h1',null,'这是一个div')
var mydiv = react.createelement('div',{id:'mydiv',classname:'ttt'},'这是一个div',mydiv1)
// render('要渲染的元素','渲染元素的位置[原生的dom对象]')
reactdom.render(mydiv,document.getelementbyid('app'))
jsx语法--符合xml规范的js语法
- 安装语法转化器并配置
npm i babel-preset-react -d
- 创建节点并渲染
var titles = '这是一个jsx div'
var myjsdiv = <h1 classname="ttt" id="mydiv" title={ titles + 'ffff' }>{ titles }</h1>
reactdom.render(myjsdiv,document.getelementbyid('app'))
创建组件
// 在react中一个构造函数就是一个最基本的组件
// 通过props传递的数据都是只读的,不能重新赋值
function hello(props) {
return <div>这是组件定义的div=== {name}==={props.age}</div>
}
var name ="zhangsan"
var person = {name: 'zh',age:20}
reactdom.render(<div><hello name={name} {...person}></hello></div>,document.getelementbyid('app'))
js文件抽离 hello.jsx ```import react from 'react';``` ```function hello(props) {``` ```return <div>这是组件定义的div=== {name} === {props.name}</div>``` ```}``` ```export default hello``` 调用组件的页面 ```import hello from './components/hello.jsx' ``` ```var name ="zhangsan" ``` ```var pesron = { ``` ```name:"zhangsan", ``` ```age:20, ``` ```sex: 1 ``` ```} ``` ```reactdom.render(<div><hello name={name} {...pesron}></hello></div>,document.getelementbyid('app')) ``` 使用class创建组件 ```class hello2 extends react.component {``` ```this.props.name="123"``` ``` render() {``` ``` return <div>这是class定义的div==={this.props.name} ==={this.props.pss}</div>``` ```}``` ```}``` ``` reactdom.render(<div><hello2 name='nihao' pss="xxx"></hello2></div>,document.getelementbyid('app'))```
推荐阅读
-
2021年宁夏多少分能上一本线(文科)?附预测宁夏文科高考分数线
-
ASP.NET MVC4入门教程(五):从控制器访问数据模型
-
Spring之借助Redis设计一个简单访问计数器的示例
-
中国全部的军校排名-一本军事院校排名以及录取分数线汇总(2021年最新)
-
ASP.NET MVC4入门教程(四):添加一个模型
-
ASP.NET MVC4入门教程(七):给电影表和模型添加新字段
-
ASP.NET MVC4入门教程(三):添加一个视图
-
2021有机会评双一流的双非?最有可能进双一流的大学?
-
双一流都是985和211吗?25所双非进入双一流
-
Java concurrency线程池之线程池原理(一)_动力节点Java学院整理