一、生命周期
组件生命周期
组件开发到结束的整个过程。react提供了组件在各个生命节点的操作方法,称为钩子函数
Vue的组件生命周期:created=>mounted=>updated=>destoryed
componentDidmount
组件挂载时触发 初始化操作和发送网络请求shouldComponentUpdate
组件将要更新 可以用来控制重绘DOM的时机 这个方法 必须要有一个返回值 bool类型true 渲染
fasle为不渲染
componentDidUpdate
组件状态更新时触发 监控到状态的变化 如果状态发生改变需要进行特定业务操作,可以写在这里componentWillUnmount
组件将要销毁时触发 回收资源操作
二、网络请求
客户端请求服务端接口,需要通过JS代码发送请求。是浏览器XHR对象
不同的框架,对于XHR对象
进行封装
JQuery .get() .post() $.ajax()
Vue axios
wx wx.request
uni-app uni.request
...............
// rcc
// 网络请求
import React, { Component } from 'react'
export default class App extends Component {
componentDidMount(){
// 发送请求写在这里
const url= "https://api.apiopen.top/getWangYiNews"
// get请求
// res.json() 处理数据为json对象格式
fetch(url).then(res=>res.json()).then(res=>{
console.log(res);
})
}
render() {
return (
<div>
</div>
)
}
}
请求示例
// rcc
import React, { Component } from 'react'
export default class App extends Component {
state = {data:null}
componentDidMount(){
this.getData()
}
getData(){
// const url = 'https://m.douyu.com/api/room/list?type=yz'
// 配合代理 需要修改url地址 添加一个标识信息
const url = '/douyu/api/room/list?type=yz'
fetch(url).then(res=>res.json()).then(res=>{
console.log(res);
this.setState({data:res.data})
})
}
showRooms = ()=>this.state.data.list.map((item,index)=>(
<div key={index}>
<img src={item.roomSrc} />
<div>{item.roomName}</div>
</div>
))
render() {
// 判断接口数据未返回时,不渲染 返回空标签
if(this.state.data == null) return <div></div>;
return (
<div>
{this.showRooms()}
</div>
)
}
}
三、子元素绑定
// rcc
// ref绑定
/***
* 子元素绑定: 通过绑定的变量 调用子元素的方法或者属性
* Vue中ref概念 通过变量可以获取到组件标签对象
* <uni-pop ref="popup"></uni-pop>
* 调用uni-pop组件的open方法 实现弹出层效果
* this.$refs.popup 组件对象
* this.$refs.popup.open() 组件对象调用方法
*/
import React, { Component } from 'react'
export default class App extends Component {
// 方法一:声明变量
son1 = React.createRef();
useSon(){
// 调用子元素的方法
// 方法一调用
this.son1.current.show()
this.son2.show()
}
render() {
return (
<div>
{/* 方法一 绑定的变量提前声明*/}
<Son ref={this.son1}/>
{/* 方法二 直接绑定不需要提前声明 */}
{/* JS中如果对象属性不存在会自动声明创建 */}
{/* el当前组件标签 Son */}
<Son ref={(el)=>(this.son2=el)}></Son>
{/* 调用子元素的方法 */}
<button onClick={this.useSon.bind(this)}>调用子元素</button>
</div>
)
}
}
class Son extends Component{
num = 5;
show(){
alert('我是子组件的show方法')
}
render(){
return <div>我是子组件</div>
}
}