javascript - React Hooks:无法在 useEffect 之外访问更新的 useState 变量?
问题描述
我是新来的反应和创建反应应用程序,在这个应用程序中,可以使用 react dnd 将食品拖动到订单列表,我面临的问题是我无法在 useEffect 之外的任何函数中获取更新后的OrderList变量,
在addFoodToOrderList和useEffect中,我正在打印相同的OrderList变量,但在addFoodToOrderList中输出为空,我知道 useState 是异步函数,但是在将第 3 个项目添加到订单列表时,它应该至少显示前 2 个项目,但它给出的是空数组(0 ) 作为输出,useEffect的大小写不同
代码 :
export default function FoodCardContainer() {
const [liked,setLiked] = useState("")
function handleLike(e) {
setLiked(prevNotes => {
return [...prevNotes,e];
});
}
const [orderList, setOrderList] = useState([]);
const [{ isOver }, drop] = useDrop(() => ({
accept: "div",
drop: (item) => {
addFoodToOrderList(item.id)},
collect: (monitor) => ({
isOver: !!monitor.isOver(),
}),
}));
const addFoodToOrderList = (id) => {
const orderItem = fooditems.filter((f) => id === f._id)
setOrderList((preorderLists) => {return [...preorderLists,orderItem[0]]});
console.log("this one outside useEffect",orderList)
};
useEffect(() => {
console.log("this one inside useEffect",orderList)
},[orderList])
我的控制台:
解决方案
似乎传递给的函数已drop
被记忆并且从未更新。文档useDrop
将此作为参数提到:
deps用于记忆的依赖数组。这类似于内置的 useMemoReact 钩子。默认值为function spec 的空数组,以及包含 object spec 的 spec 的数组。
由于您提供了函数规范,因此它默认为空数组作为 deps。
所以你应该指定deps。
const [{
isOver
}, drop] = useDrop(() => ({
accept: "div",
drop: (item) => {
addFoodToOrderList(item.id)
},
collect: (monitor) => ({
isOver: !!monitor.isOver(),
}),
}), [addFoodToOrderList]);
推荐阅读
- node.js - 无效的频道名称 - 可能是什么原因造成的?
- python - 什么是神经网络在张量流中执行
- node.js - 通过咖啡脚本中的承诺和循环避免内存泄漏(无等待)
- java - 无需再次读取文件即可获取全局变量的值
- javascript - 为什么 array.splice() 在用于作为其副本的变量时会更改变量?
- c# - Monogame:在类中创建绘图函数
- r - 如果另一个感兴趣的变量不止一次出现,则如果存在 NA 则子集行?
- jquery - AJAX 在自定义 wp_loop 中加载更多发布按钮
- firebase - Firebase Cloud Functions 升级停机时间
- authentication - Asp core 2.2 多重认证