【发布时间】:2021-10-21 21:52:52
【问题描述】:
您好,我现在正在学习 React,但遇到了状态问题..
我知道当状态改变时,组件会重新渲染,UseEffect 中的代码只运行一次。 但是我无法准确解释为什么我在 JSX 或渲染语法中编写 setState 时会发生无限渲染。
以下代码导致无限重新渲染
import React, { useState, useEffect } from 'react'
const index = () => {
const [active, setActive] = useState(false);
console.log("render", active);
setActive(false);
return (
<div>
</div>
)
}
export default index
但是下面的代码即使一直调用setState也没问题。
import React, { useState, useEffect } from 'react'
const index = () => {
const [active, setActive] = useState(false);
console.log("render", active);
useEffect(() => {
setInterval(()=>{
console.log("run")
setActive(true)
},0);
}, [])
return (
<div>
</div>
)
}
无论状态值如何,setState 都会触发重新渲染吗? 我想知道在 useEffect 之外使用 setState 会导致错误的确切原因。
【问题讨论】:
-
这个好像和组件生命周期有关;第一个示例在渲染之前运行
setActive,此时循环可以被 React 中止或重新启动,而第二个示例在渲染完成后调用它,此时 React 能够更好地避免不必要的重新渲染
标签: javascript reactjs state render setstate