reactjs - 使用 useEffect 存储响应以避免使用反应钩子重新渲染
问题描述
我正在使用 React 钩子并试图弄清楚,我应该如何将 api 调用的响应存储 response.data._embedded.assets
在状态变量中。
由于重新渲染,使用setAssets(response.data._embedded.assets);
不起作用。所以我决定使用useEffect
如下代码所示,但这违反了 react hooks 的规则——Hooks 只能在函数组件的主体内部调用。我知道useEffect
应该根据反应钩子在外部定义,但是我将如何将响应存储在状态变量中?请指教。
const [selectedTabIndex, setselectedTabIndex] = useState(0);
const [assets,setAssets] = useState([]);
let companyCategory;
axios
.get(url, {
params: {
assetCategoryId: selectedTabIndex
}
}).then(response => {
if (sessionStorage.getItem('companyCategory') !== null) {
companyCategory = JSON.parse(sessionStorage.getItem('companyCategory') )
}
console.log("Inside response of web api call");
console.log(response.data._embedded.assets);
useEffect(() => {
// Should not ever set state during rendering, so do this in useEffect instead.
setAssets(response.data._embedded.assets);
}, []);
//setAssets(response.data._embedded.assets);
}).catch(err => console.log(err));
在一个类组件中,上面的状态变量声明在响应中是这样的:
this.setState({
companyCategory: companyCategory,
assets: response.data._embedded.assets
})
解决方案
我会将整个 get 请求放在 useEffect 中。
const [selectedTabIndex, setselectedTabIndex] = useState(0);
const [assets,setAssets] = useState([]);
useEffect(() => {
// Should not ever set state during rendering, so do this in useEffect instead.
let companyCategory;
axios
.get(url, {
params: {
assetCategoryId: selectedTabIndex
}
}).then(response => {
if (sessionStorage.getItem('companyCategory') !== null) {
companyCategory = JSON.parse(sessionStorage.getItem('companyCategory') )
}
console.log("Inside response of web api call");
console.log(response.data._embedded.assets);
setAssets(response.data._embedded.assets);
}).catch(err => console.log(err));
}, []);
推荐阅读
- qt - 在 msvc2017 上构建 Qt 5.12.4 的 qtwebengine 以启用专有编解码器
- lua - 即使在 metatable 中定义了 __eq 时,引用相等检查(在表上)
- xamarin - VersionOne SDK 不适用于 VS2019 和 Xamarin
- excel - 如何使用输入值来定位包含相同值的单元格?
- python - 将不同大小的图像调整为 28x28 图像并将其转换为一个 csv 文件
- ios - 从 iOS 应用程序到 AWS Elastic Beanstalk 后端的间歇性 SSL 错误
- javascript - 如何更改表单提交行为
- javascript - 单击时使用 javascript 增加按钮文本?
- javascript - 如何在 django rest 框架中将错误响应发送回客户端?
- xpath - 如何为肥皂标题和正文创建 xPath