reactjs - 如何正确重构反应钩子嵌套函数
问题描述
我有一个功能组件,它使用两种状态,并且都根据触发的事件进行更改。
我在 react docs上读过,在嵌套函数或条件中更改状态是个坏主意。我还看到了一些使用 useEffects 的示例,但我不清楚如何正确重构它。
这是我的整个组件:
import React, { useState, useEffect } from 'react'
import './App.css'
import AppHeader from '../app-header'
import AppFooter from '../app-footer'
import SearchInput from '../search-input'
import Stats from '../stats'
import Chart from '../chart'
import { getBundleInfoAPI } from '../../services/hostApi'
import 'react-loader-spinner/dist/loader/css/react-spinner-loader.css'
import Loader from 'react-loader-spinner'
function App() {
const [isSpinnerVisible, setSpinnerVisible] = useState(false)
const [bundleData, setBundleData] = useState({})
const _handleOnItemSelected = (item) => {
if (item && item.package && item.package.name && item.package.version) {
setSpinnerVisible(true)
getBundleInfoAPI(item.package.name, item.package.version)
.then(resposeData => setBundleData(resposeData))
.finally(() => setSpinnerVisible(false))
} else {
// TODO - implement an error handler component?
console.warn('WARNING: The selected bundle does not have name or version!')
}
}
return (
<div className="app">
<AppHeader />
<main>
<SearchInput onItemSelected={_handleOnItemSelected} />
<div className="app-main-inner-container">
<Loader type="Triangle" color="#00BFFF" height={200} width={200} visible={isSpinnerVisible} />
{!isSpinnerVisible &&
<div className="app-stats-chart-container">
<section className="app-stats-container"><Stats size={bundleData.stats} /></section>
<section className="app-chart-container"><Chart bundleChartData={bundleData.chart} /></section>
</div>
}
</div>
</main>
<AppFooter />
</div>
)
}
export default App
解决方案
这很好,您在开始获取时显示加载屏幕,然后在获取完成时将其隐藏......不需要重构
推荐阅读
- java - Firebase 2nd 开发人员无法编辑 Android Studio
- javascript - ReactJs将“活动”类添加到按钮列表中的按钮
- huawei-mobile-services - HarmonyOS JS UI 框架是否类似于 React-Native UI 框架?
- jquery - 使用 replaceWith 替换 div 标签
- javascript - 悬停时,我的圆形 div 在翻转时卡住了,我的两个 div 在悬停时无法超过底部 div
- assembly - 在 MIPS 32 汇编中,为什么“la”用于打印字符串,而“lw”用于打印整数?
- hashmap - javacc中的哈希图
- plotly - 折线图中缺少数据点
- c++builder - CopyFile() 在 Windows 10 中从网络驱动器复制到本地驱动器
- python - 终端卡在 python manage.py makemigrations 和 runserver 上