如何有条件地声明 useState?
对于我的问题,我现在从 api 获取数据,如下所示。
const fetchSomething = () => dispatch => {
return axios
.get('productsapi/getsomething', {
})
.then(res => {
dispatch({
type: FETCH_SOMETHING,
payload: res.data[0].Groups[0].Products,
payGroup: res.data[0],
});
})
.catch(err => {
console.log('fetching error');
throw err;
});
};
正如您所见,由于我在组件中遇到的问题,我从 api
payload
和
paygroup
获取了 2 种数据。
这是组件
let hotProductList = useSelector(state => state.productReducer.hotProduct);
let hotProductGroup = useSelector(
state => state.productReducer.newHotProductGroups,
);
const [homeHotProductList, setHomeHotProductList] = useState(hotProductGroup.Groups[0].Products);
//No Error
//---------
//const [homeHotProductList, setHomeHotProductList] = useState(hotProductList);
//---------
正如您在
useState
中看到的那样。如果我想使用来自
payGroup
的数据呈现
initial productList
,我必须声明为
useState(hotProductGroup.Groups[0].Products)
。问题是,这种声明总是返回错误,指出
undefined 不是对象
但是,如果我想使用来自
payload
的数据呈现
initial productList
,则不会发生此错误。
我应该怎么做才能使
declaration
对
payGroup
起作用而不出现错误
我假设
homeHotProductList
是一个数组。您可以在
useEffect
中设置
homeHotProductList
。将
hotProductList
和
hotProductGroup
添加为
useEffect
的依赖项。因此,每当这些值发生变化时,您都可以有条件地在
useEffect
内使用
setHomeHotProductList
设置
homeHotProductList
。
let hotProductList = useSelector(state => state.productReducer.hotProduct);
let hotProductGroup = useSelector(
state => state.productReducer.newHotProductGroups,
);
const [homeHotProductList, setHomeHotProductList] = useState([]);
useEffect(() => {
// here you can set homeHotProductList conditionally
}, [hotProductList, hotProductGroup])
关于此错误
undefined is not an object
如果您没有获得像
hotProductGroup?.Groups?.[0]?.Products 这样的值,则可以使用
可选链接
或
Nullish 合并运算符
?? []