console.log 后 reactjs 设置挂钩方法不起作用
reactjs set hook method is not working after console.log
我想通过 useEffect 使用完整“菜单”数据项设置 filtredMenu,但是当我 console.log 它时,它给出 null。当我执行 console.log(menu) 时,它没有问题,我在控制台中看到了所有菜单项。
稍后我将按类别按钮过滤 filtredMenu。
我做错了什么?
这是我的文档:
import { useContext, useEffect, useState } from "react";
import MenuContext from "../context/MenuContext";
function Menu() {
const { menu, setMenu } = useContext(MenuContext);
const [filtredMenu, setFiltredMenu] = useState(null);
useEffect(() => {
setFiltredMenu(menu);
console.log(filtredMenu)
}, []);
function handleMenu(e) {
e.target.value !== "all"
? setFiltredMenu(menu.filter(item => item.category === e.target.value))
: setFiltredMenu(menu);
}
return (
<>
{/* {filtredMenu.map((item) => (
<>
<button key={item.id} value={item.category} onClick={handleMenu}>
{item.category}
</button>
</>
))} */}
{menu.map((item) =>
<div key={item.id}>
<div>
{item.title}
</div>
<div>
{item.category}
</div>
<div>
{item.price}
</div>
<div>
{item.desc}
</div>
<img src={item.src} alt="image" />
</div>
)}
</>
)
}
export default Menu
谢谢。
这是因为 React 的 setState 函数是 async,您不会立即看到状态变化。如果您稍等片刻,您会看到值发生变化。
我想通过 useEffect 使用完整“菜单”数据项设置 filtredMenu,但是当我 console.log 它时,它给出 null。当我执行 console.log(menu) 时,它没有问题,我在控制台中看到了所有菜单项。 稍后我将按类别按钮过滤 filtredMenu。 我做错了什么?
这是我的文档:
import { useContext, useEffect, useState } from "react";
import MenuContext from "../context/MenuContext";
function Menu() {
const { menu, setMenu } = useContext(MenuContext);
const [filtredMenu, setFiltredMenu] = useState(null);
useEffect(() => {
setFiltredMenu(menu);
console.log(filtredMenu)
}, []);
function handleMenu(e) {
e.target.value !== "all"
? setFiltredMenu(menu.filter(item => item.category === e.target.value))
: setFiltredMenu(menu);
}
return (
<>
{/* {filtredMenu.map((item) => (
<>
<button key={item.id} value={item.category} onClick={handleMenu}>
{item.category}
</button>
</>
))} */}
{menu.map((item) =>
<div key={item.id}>
<div>
{item.title}
</div>
<div>
{item.category}
</div>
<div>
{item.price}
</div>
<div>
{item.desc}
</div>
<img src={item.src} alt="image" />
</div>
)}
</>
)
}
export default Menu
谢谢。
这是因为 React 的 setState 函数是 async,您不会立即看到状态变化。如果您稍等片刻,您会看到值发生变化。