【React 6/100】 React原理 | setState | JSX语法转换 | 组件更新机制
2021-05-14 01:28
标签:相同 转换 rand floor log tco class ceil reac ****关键字 | setState | JSX语法转换 | 组件更新机制 纯组件: PureComponent 与 React.Component 功能相似 区别: PureComponent 内部自动实现了 shouldComponentUpdate钩子,不需要手动比较 原理:纯组件内部通过分别比对前后两次 props和state的值,来决定是否重新渲染组件 【React 6/100】 React原理 | setState | JSX语法转换 | 组件更新机制 标签:相同 转换 rand floor log tco class ceil reac 原文地址:https://www.cnblogs.com/YangxCNWeb/p/11994536.html组件更新机制
组件性能优化
减轻state
避免不必要的重新渲染
// 生成随机数
class RandomNumber extends React.Component {
state = {
number: 0
};
btnHandlerClicked = () => {
this.setState((state, props) => {
return {
number: Math.ceil(Math.random() * 3)
}
})
};
// 两次生成的随机数可能相同,如果相同就没必要重新渲染
// 将要更新UI的时候会执行这个钩子函数
shouldComponentUpdate(nextProps, nextState, nextContext) {
console.log('nextProps: ',nextProps ,' -- nextState: ' , nextState , ' -- nextContext' , nextContext , ' -- this.state', this.state);
if(nextState.number !== this.state.number || nextProps.sendnumber !== this.props.sendnumber){
return true;
}
return false;
}
render() {
console.log('render -- ');
return (
随机数: {this.state.number}
纯组件
作用以及使用
// 生成随机数
class RandomNumber extends React.PureComponent {
state = {
number: 0
};
btnHandlerClicked = () => {
this.setState((state, props) => {
return {
number: Math.ceil(Math.random() * 3)
}
})
};
render() {
console.log('render -- ');
return (
随机数: {this.state.number}
实现原理
不要直接修改原数据
// 正确做法:创建新对象
const newObj = { ...this.state.obj, number: Math.floor(Math.random() * 3) }
this.setState(() => {
return {
obj: newObj
}
})
// 错误演示:直接修改原始对象中属性的值
const newObj = this.state.obj;
newObj.number = Math.floor(Math.random() * 3)
this.setState(() => {
return {
obj: newObj
}
})
上一篇:Ajax
下一篇:写一个js配合rem
文章标题:【React 6/100】 React原理 | setState | JSX语法转换 | 组件更新机制
文章链接:http://soscw.com/essay/85394.html