javascript - 为什么我没有进入 React 无限重新渲染循环?
问题描述
我一直认为在调用setState
内部有任何形式的useEffect
调用都会导致无限的重新渲染循环,因为useEffect
每次渲染都会被调用。但由于某种原因,我的代码很好,而且我的 Next.js 应用程序运行良好。我能知道我的知识差距是什么吗?
const [base, setBase] = useState(DEFAULT_BASE)
const [rateData, setRateData] = useState([])
const [symbolList, setSymbolList] = useState([])
// At the start, we want to display the rates in terms of EUR
useEffect(async () => {
const data = await calculator(FETCH_DATA, base)
setRateData(data)
// Create the symbol list
const symbols = []
Object.keys(data).map((c) =>
symbols.push(c)
)
setSymbolList(symbols)
console.log(symbolList)
}, [])
解决方案
最后你有一个空数组作为参数。
带有空[]
依赖数组的 UseEffect 意味着仅在 时才运行componentDidMount
,这仅在组件第一次加载时执行。
不传递该参数将导致在更改任何状态变量并且每次重新渲染时调用它(类似于您的期望)。
如果将变量传递给数组,则仅当该变量更改时才会调用它。您也可以拥有多个useEffect
功能,因此您也可以有选择地渲染。
推荐阅读
- c++ - 计算 BASYS MX3 板上的定时器间隔
- python-3.x - Python:xpath 提取不在循环中工作
- angular - 无法使用 Selenium 在 Shadow DOM 内单击位于 iframe 内的元素
- html - 浏览器忽略分页符
- javascript - js中的数组过滤和动态映射
- maven - Maven jaxws:wsimport 不生成 wsdl 文件
- acumatica - 无法将 ListFolder 添加到移动应用程序 - 即使根据记录的示例
- r - 在R中按另一列分组后如何仅删除一列中的异常值
- c# - 正则表达式模式不适用于我的 C# 代码,但它适用于在线测试仪
- python - 使用 pySVN 修改解锁