【发布时间】:2021-08-19 11:23:41
【问题描述】:
我正在开发一个 React Native 应用程序。
在我的主要组件中,我使用 UseEffect 挂钩将数据库响应存储在“食物”变量中。然后,我将使用此变量中包含的数据创建一个列表。
这是我的钩子:
const [ food, setFood ] = useState([]);
const [listData, setListData] = useState([]);
const load_food = async () => {
db.listProduct().then(row => setFood(row))
setListData(
Array(food.length)
.fill('')
.map((_, i) => ({ key: `${i}`, product: `${food[i].PRODUCTNAME}`,
date: `${food[i].DATE}`,
uri: `${food[i].IMAGEURL}`,
id: `${food[i].IDPRODUCT}`})))
};
useEffect( () => { load_food(food) }, [food] );
但问题是这个钩子被无限期地调用。如果我将 console.log('test') 放在钩子中,日志将是无限的。 因此,我的应用程序非常滞后
根据我对类似问题的理解,我必须在我的钩子中留下一个空数组,如下所示:
useEffect( () => { load_food(food) }, [] );
但是这样做,我的列表没有初始化。
我找不到解决办法
【问题讨论】:
-
你好,你可以试试这个方法
setListData(food.map((item,i)=>{key:i,product:item.PRODUCTNAME,date: item.DATE,uri:item.IMAGEURL,id:item.IPRODUCT})); -
您好,感谢您的回答。不幸的是它不起作用,我仍然有一个无限循环
-
嗨@Fedour你能试试这个代码stackoverflow.com/a/62490696/13725816
标签: reactjs react-native expo