React props 频繁更新 和 state 的更新拆分

使用React开发时,某些父组件会不断触发props来更新子组件,如果props频发触发更新,那么用户在输入一些数据时总是会被刷新,会出现频繁失去控件焦点的问题,这个问题的解决方式是将props和state的触发更新的逻辑分开:

/**
* React 16.3.1
* 拆分props 和 state 更新组件逻辑。
* @author dzy
*/
@connect((state)=>{
	return state;
})
class TestComponent extends PureComponent {
	
	// 此处省略constructor
	state = {
		num: 0,
		changed: false, // 调用setState时更新为true
		shouldUpdate: false, // shouldComponentUpdate中判断是否更新
	}
	
	static getDerivedStateFromProps(nextProps, prevState) {
		const nextState = {
			...prevState,
			changed: false,
			shouldUpdate: prevState.changed,// 调用setState()时,changed会变为true
		};
		// 省略其他nextState的处理
		return nextState;
	}
	
	shouldComponentUpdate(nextProps, nextState, nextContext) {
		const isPropsShouldUpdate = (prevProps, nextProps) => {
			// 此处写props更新时的逻辑
			return prevProps.data !== nextProps.data;
		}
		const isStateShouldUpdate = (nextState)=> {
			return nextState.shouldUpdate;
		}
		return isPropsShouldUpdate(this.props, nextProps) || isStateShouldUpdate(nextState);
	}
	
	/** 重写setState方法,调用此方法时会设置changed字段为true */
	setState(state, callback) {
		const nextState = {...state, changed: true};
		super.setState(state, callback);
	}
	
	render() {
		console.log("state.num: ", this.state.num, " props.num", this.props.num);
		return <button onClick={()=>{
				this.setState({num: this.state.num+1});
			}}>
				Click Me
			</button>;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React是一个用于构建用户界面的JavaScript库,它采用了组件化的开发模式,将UI拆分成独立且可复用的组件,通过组合这些组件来构建复杂的用户界面。React的生命周期是指在组件的创建、更新和销毁过程中,React自动调用的一系列函数,这些函数称为生命周期函数,可以在组件不同的生命周期阶段中执行一些操作。 React的生命周期分为三个阶段:组件的挂载、更新和卸载。下面逐一介绍: 1. 组件的挂载 这个阶段包括以下方法: constructor(props):组件被创建时调用,通常用于初始化组件的状态和绑定事件处理函数。 static getDerivedStateFromProps(props, state):在组件被实例化和每次接收到新的props时调用,返回一个对象来更新state。 render():渲染组件,返回组件的虚拟DOM。 componentDidMount():组件渲染完成后调用,通常用于发送网络请求、订阅事件等。 2. 组件的更新 这个阶段包括以下方法: static getDerivedStateFromProps(props, state):在组件被实例化和每次接收到新的props时调用,返回一个对象来更新state。 shouldComponentUpdate(nextProps, nextState):在组件更新前调用,返回一个布尔值,用于判断是否需要重新渲染组件。 render():渲染组件,返回组件的虚拟DOM。 getSnapshotBeforeUpdate(prevProps, prevState):在组件更新前调用,返回一个值,将被传递给componentDidUpdate()。 componentDidUpdate(prevProps, prevState, snapshot):在组件更新后调用,通常用于更新DOM或执行网络请求等。 3. 组件的卸载 这个阶段只有一个方法: componentWillUnmount():在组件被卸载前调用,通常用于取消网络请求、清除定时器等。 总结:React的生命周期函数是一系列在组件创建、更新和销毁过程中自动调用的方法,可以在不同的阶段执行一些操作。这些函数包括组件的挂载、更新和卸载三个阶段。熟悉React生命周期函数可以帮助我们更好地理解React组件的运作机制,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值