【发布时间】:2021-12-09 14:48:09
【问题描述】:
我的 React Native 应用程序中有一个标准化的 Redux 存储。
我的reducer的结构是:
{
byId: {},
allIds: []
}
在我的组件中,我使用 useSelector 钩子获取 Redux 状态片段:
const categories = useSelector((state: AppState) =>
state.products.allIds.map((id) => state.categories.byId[id.toString()])
);
useSelector 中的逻辑只是将byId 对象转换为数组。
当我将categories 数组设置为依赖项时发生无限循环:
const [values, setValues] = useState<any[]>([]);
useEffect(() => {
setValues([{ id: 1 }]);
console.log("logging");
}, [categories]);
不确定是什么问题。我相信是 useSelector 逻辑将对象转换为数组。
编辑:
完整的组件代码:
// React
import React, { useEffect, useState } from "react";
// React redux
import { useSelector } from "react-redux";
import { AppState } from "@reducers/rootReducer";
// Logic
import ProductsScreenLogic from "./ProductsScreen.logic";
// Common components
import ScreenView from "@common/screen/Screen.view";
// Components
import NewProductModalView from "@components/products/new-product-modal/NewProductModal.view";
import ProductsTabsView from "@components/products/products-tabs/ProductsTabs.view";
import ProductListView from "@components/products/products-list/ProductList.view";
import CategoryListView from "@components/products/category-list/CategoryList.view";
const ProductsScreenView: React.FC = () => {
const { displayProductList, setDisplayProductList, products } =
ProductsScreenLogic();
// Makes the categories ById object into an array of categories
const categories = useSelector((state: AppState) => state.categories.allIds.map((id) => state.categories.byId[id.toString()])
);
const [values, setValues] = useState<any[]>([]);
useEffect(() => {
setValues([{ id: 1 }]);
console.log("logging");
}, [categories]);
return (
<>
<NewProductModalView />
<ScreenView></ScreenView>
</>
);
};
export default ProductsScreenView;
【问题讨论】:
-
没有发现上述代码有任何问题,请发布完整的组件代码
-
@sojin 更新了帖子
标签: react-native redux react-redux infinite-loop normalizr