React
React 是一个用于构建用户页面的JavaScript库,专注于视图,实现组件化开发。
React 特点
1.声明式设计 −React采用声明范式,可以轻松描述应用。
2.高效 −React通过对DOM的模拟,最大限度地减少与DOM的交互。
3.灵活 −React可以与已知的库或框架很好地配合。
4.JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。
5.组件 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。
6.单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。
组件化概念
将一个复杂的页面分成若干个独立的组件,每个组件都包含自己的逻辑和样式,在将这些组件组合成一个完整的页面。这样的操作即减少了逻辑复杂度又实现了代码的重用。
组件的定义可分为2种
函数声明组件
类声明组件
函数组件
1.函数就是组件
2.组件名称规定首字母大写,小写认为是一个标签元素
3.组件在元素中应用<组件名/> or <组件名></组件名>
4.组件传递的属性或方法(<组件名 title={“222”}>)会把传入的属性包成一个对象({title:“222”})传给这个组件函数props,在组件内取值时就是,{props.title}
function School(props){
return <h1>学校{props.color} {props.size}</h1>
}
let data = {color:'red',size:100}
ReactDom.render(<div>
<div><School color="red" size="100"></School></div>
<div><School color="green" ></School></div>
<div><School {...data}></School></div>
</div>,window.root);
函数组件会在内部添加一个render方法,把函数的返回结果作为render方法的返回结果
let Clock = ()=>{
return <h1>当前时间是:{new Date().toLocaleString()}</h1>
}
Clock.render = function(){
Clock();
}
类组件
类组件在渲染时会默认调用render方法
import React from "react";
import ReactDOM from "react-dom";
class Clcok extends React.Component{
render(){
return <h1>哈哈</h1>
}
}
类组件内有状态和钩子函数
需要继承React.Component
React.Component 是一个基类,有生命周期,更改状态的方法
继承React.Component 之后才算是一个React类。
import React from "react";
import ReactDOM from "react-dom";
class Clcok extends React.Component{
constructor(props){//会接受组件传入的属性or方法
super(props);
//this.state 是规定死的,表示给这个组件生命状态
this.state={ }
}
// state={}
render(){
return <h1>哈哈</h1>
}
}
JSX 语法
JSX 是一种JavaScript和XML混写的语法,是JavaScript的扩展。
基本结构
render(
<div>
<div>
<div>content</div>
</div>
</div>,
document.getElementById('example')
);
React 生命周期(钩子函数)
componentDidMount(){} 当前组件挂在完成,在render方法加载完之后执行
unmountComponentAtNode() 卸载组件
//用法
ReactDOM.unmountComponentAtNode(window.root)
componentWillUnmount(){} 将要卸载,在此阶段中删掉所有的监听和卸载异步方
componentDidMount(){
this.itemer = setInterval=()=>{
//this.setState 可以导致页面刷新
this.setState({time:new Date().toLocalString()})
}
}
componetWillUnmount(){
clearInterval(this.timer);
}
React路由的使用
cnpm i --save react-router-dom
创建一个新的router.js文件,并在App.js中导入这个路由文件