在 React 中渲染后触发 onClick 事件
onClick event firing off after render in React
我在 React 中有一个边栏菜单,当单击该边栏中的按钮时,我想更新变量的状态。但是事件在渲染时触发而不是等待点击,非常感谢帮助!
边栏
return (
<>
<div id="container1">
<ProSidebar id='tester1'>
<SidebarHeader>
<h1>Header Title</h1>
</SidebarHeader>
<SidebarContent>
<Menu iconShape="square">
<MenuItem onClick={funx(1)} icon={<FiHome className='sideBarIcon'/>}></MenuItem>
<MenuItem icon={<FaList className='sideBarIcon'/>}></MenuItem>
<MenuItem icon={<FaRegHeart className='sideBarIcon'/>}></MenuItem>
<MenuItem icon={<RiPencilLine className='sideBarIcon'/>}></MenuItem>
<MenuItem icon={<BiCog className='sideBarIcon'/>}></MenuItem>
</Menu>
</SidebarContent>
<SidebarFooter>
<Menu iconShape="square">
<MenuItem icon={<FiLogOut />}>{x}</MenuItem>
</Menu>
</SidebarFooter>
</ProSidebar>
</div>
</>
);
设置状态的位置:
const [x, setX] = useState([]);
const funx = (e) => {
console.log(e);
setX(e);
}
我想补充一点,如果我从 funx
中删除 e
参数,并且只在我的菜单中调用 funx
,onclick 事件似乎工作正常。但是我想通过 1/2/3/等。取决于点击的内容
onClick={funx(1)}
括号内的代码在渲染时计算,所以你实际上是在调用函数。你想传递一个函数引用。如果你需要通过 1
你可以这样做:
<MenuItem onClick={() => funx(1)} ...>
而不是像<MenuItem onClick={funx(1)} icon={<FiHome className='sideBarIcon'/>}></MenuItem>
那样设置onClick事件处理函数
您必须更改下面给出的类似代码:
<MenuItem onClick={() => funx(1)} icon={<FiHome className='sideBarIcon'/>}></MenuItem>
或者您可以修改事件处理函数,如下所示:
const funx = (value) = (event) => {
console.log(value);
setX(value);
}
现在您可以调用函数如下:
<MenuItem onClick={funx(1)} icon={<FiHome className='sideBarIcon'/>}></MenuItem>
我在 React 中有一个边栏菜单,当单击该边栏中的按钮时,我想更新变量的状态。但是事件在渲染时触发而不是等待点击,非常感谢帮助!
边栏
return (
<>
<div id="container1">
<ProSidebar id='tester1'>
<SidebarHeader>
<h1>Header Title</h1>
</SidebarHeader>
<SidebarContent>
<Menu iconShape="square">
<MenuItem onClick={funx(1)} icon={<FiHome className='sideBarIcon'/>}></MenuItem>
<MenuItem icon={<FaList className='sideBarIcon'/>}></MenuItem>
<MenuItem icon={<FaRegHeart className='sideBarIcon'/>}></MenuItem>
<MenuItem icon={<RiPencilLine className='sideBarIcon'/>}></MenuItem>
<MenuItem icon={<BiCog className='sideBarIcon'/>}></MenuItem>
</Menu>
</SidebarContent>
<SidebarFooter>
<Menu iconShape="square">
<MenuItem icon={<FiLogOut />}>{x}</MenuItem>
</Menu>
</SidebarFooter>
</ProSidebar>
</div>
</>
);
设置状态的位置:
const [x, setX] = useState([]);
const funx = (e) => {
console.log(e);
setX(e);
}
我想补充一点,如果我从 funx
中删除 e
参数,并且只在我的菜单中调用 funx
,onclick 事件似乎工作正常。但是我想通过 1/2/3/等。取决于点击的内容
onClick={funx(1)}
括号内的代码在渲染时计算,所以你实际上是在调用函数。你想传递一个函数引用。如果你需要通过 1
你可以这样做:
<MenuItem onClick={() => funx(1)} ...>
而不是像<MenuItem onClick={funx(1)} icon={<FiHome className='sideBarIcon'/>}></MenuItem>
您必须更改下面给出的类似代码:
<MenuItem onClick={() => funx(1)} icon={<FiHome className='sideBarIcon'/>}></MenuItem>
或者您可以修改事件处理函数,如下所示:
const funx = (value) = (event) => {
console.log(value);
setX(value);
}
现在您可以调用函数如下:
<MenuItem onClick={funx(1)} icon={<FiHome className='sideBarIcon'/>}></MenuItem>