javascript - 如何将事件从组件传递到嵌套函数?
问题描述
我有两个拆分函数,我需要将一个值从一个传递到另一个,如下所示。const handleClick = icon.onClick(category)
和 和有什么不一样const handleClick = () => icon.onClick(category)
?
以及如何event
将组件传递给handleClick()
函数?
export const useCategories = () => {
const handleClick = (category, something) => {
event.stopPropagation() // <-- 3. How to get event?
console.log(category, something) // <-- 4. Get every value
}
return {
icon: {
onClick: (category) => handleClick(category, 'anything') // <-- 2. add second var value
}
}
}
export const Categories = () => {
const { icon } = useCategories()
return (
<div>
{categories.map((category) => {
const handleClick = icon.onClick(category) // <-- 1. pass category value
return <Icon onClick={handleClick} />)}
}
</div>
)
}
解决方案
您需要通过所有点击处理程序代理事件对象。我喜欢使用 curried 函数来使附加点击处理程序更简单一些。不要忘记为映射的图标添加一个反应键。
export const useCategories = () => {
const handleClick = (event, category, something) => {
event.stopPropagation();
console.log(category, something);
};
return {
icon: {
// curried function to receive category and return onClick handler
onClick: category => event => handleClick(event, category, 'anything'),
}
}
}
export const Categories = () => {
const { icon } = useCategories();
return (
<div>
{categories.map((category, index) => (
<Icon
key={index}
onClick={icon.onClick(category)} // <-- set category
/>
)
</div>
);
}
推荐阅读
- amazon-web-services - SSH 到面向 Internet 的 NLB 后面的私有 ec2 实例
- opencv - 使用 emcmake(emscripten 和 opencv)的未定义符号
- javascript - Discord.js 嵌入随机图像
- python - 如何使用 python 在 lambda 中搜索 JSON 数组并在 AWS API 中获得响应
- python - 在虚拟环境中保存python文件
- reactjs - 动态改变半径并更新当前位置(google-map-react)
- c# - 在 ac# Web 应用程序中使用 HttpClient
- c++ - 从不同的文件访问一个类而不#include它?
- javascript - CORS 错误:我的 WebApp 是否需要某种服务器来订阅 Web Socket Feed?
- performance - perf 输出中的“1.234 CPUs used”是什么意思?