[react] componentWillUpdate可以直接修改state的值吗?
不行, 这样会无限循环下去
1: 不行,这样会导致无限循环报错。
2:在react中直接修改state,render函数不会重新执行渲染,应使用setState方法进行修改
是只可以用setState修改state的值吗?
react组件在每次需要重新渲染时候都会调用componentWillUpdate()
,
例如,我们调用 this.setState()
时候
在这个函数中我们之所以不调用this.setState()
是因为该方法会触发另一个componentWillUpdate()
,如果我们componentWillUpdate()
中触发状态更改,我们将以无限循环结束.
可以吧,在render函数执行前修改state都是可以渲染的(但不能调用this.setState(),否则会死循环)。在componentWillUpdate中可以使用nextState.test = 1这种写法
首先我认为这里题目说的是直接使用this.state = {}的方式进行设置。
首先答案是你可以设置this.state,但是仅仅只是在componentWillUpdate的执行体以及后续的生命周期,例如UNSAFE_componentWillUpdate也能获取到componentWillUpdate里执行的this.state={}的值。但是你修改的只是更新前当前组件的state,但是实际上在react内部是有一个newState的值保存下一次要更新的state。所以你是无法通过this.state改变下一次更新时的state值的。其次就是如果你使用this.setState的话,会造成无限setState的循环。
看了大家的回答,我觉得不够全面,基本意思是对的。
1.首先你能这么做,但是不建议,因为就像大家说的会造成无限渲染
2.并不是说任何情况下不能在此生命周期方法中使用this.setState(),你可以设置合理的条件,保证它不会在每次渲染的时候执行this.setState(),而只是在需要的情况下执行【这很重要】
3.不止componentWillUpdate方法,比如componentWillReceiveProps也可以这样设置条件
人家说的直接修改this.state
值,这当然可以,只是你在其他生命周期和render函数里拿不到这个值而已,毕竟update后,state又变了,上面说无限循环的是setState()
吧,,题目有点模糊
首先根据react特性决定如果只是this.state来更改值的话,是不会起效的,并且这样的写法是会有警告的;
其次在componentWillUpdate中去使用setState来修改值的话,不一定就会产生死循环;具体要看你是怎么使用setState的,如果只是传入一个对象的话,那么是会产生死循环的;但是如果传入一个函数的话:(preState,props)=>{},可以通过条件来避免死循环;也就是说在条件满足的情况下,才会进行修改来重渲染,否则就不修改,相应的就不会重渲染,也就不存在会一直触发componentWillUpdate函数
react组件在每次需要重新渲染时候都会调用
componentWillUpdate()
,例如,我们调用
this.setState()
时候在这个函数中我们之所以不调用
this.setState()
是因为该方法会触发另一个componentWillUpdate()
,如果我们componentWillUpdate()
中触发状态更改,我们将以无限循环结束.
大佬深入浅出啊
Most helpful comment
react组件在每次需要重新渲染时候都会调用
componentWillUpdate()
,例如,我们调用
this.setState()
时候在这个函数中我们之所以不调用
this.setState()
是因为该方法会触发另一个componentWillUpdate()
,如果我们componentWillUpdate()
中触发状态更改,我们将以无限循环结束.