javascript - 单击时未触发 onClick 事件 - 反应
问题描述
我对反应非常陌生,我正在努力让我的 onClick 工作。当页面呈现时,我看到它被调用(多次,取决于数组中的项目数)但不是在点击时。
const BlogPage = props => {
const posts = props.data.allContentfulPost.edges;
const postsStable = props.data.allContentfulPost.edges;
const categoriesStyle = {
marginBottom: '8px',
};
const filterCategories = category => {
console.log('here', category);
// this.posts = this.posts.filter(p => p.catergory === category);
};.
return (
<div style={categoriesStyle}>
{posts.map(({ node: c }) => (
<Badge onClick={filterCategories(c.category)}
key={c.id}
category={c.category}
color="#fff">
{c.category}
</Badge>
))}
</div>
);
};
我努力了:
onClick={() => filterCategories(c.category)}
和
onClick={() => {
filterCategories(c.category);
}}
const Badge = ({ children, category = 'Other', color = '#4a4a4a' }) => {
return (
<Container background={pillColor(category)} color={color}>
{children}
</Container>
);
};
Badge.propTypes = {
children: PropTypes.node.isRequired,
category: PropTypes.string,
color: PropTypes.string,
};
根据答案,问题似乎在于 Badge 不是 HTML 元素。
解决方案
传递给的值onClick
必须是一个函数。
filterCategories(c.category)
filterCategories
立即调用并将其返回值(undefined
因为没有return
语句)传递给onClick
.
undefined
不是函数。
创建一个使用所需参数调用filterCategories
的函数(例如,使用bind
,或仅使用函数表达式或箭头函数)并传递它。
此外,Badge
不是 HTML 元素。如果您的组件没有将onClick
prop 传递给 HTML 元素,则它不会在 DOM 中执行任何操作。
推荐阅读
- java - Wildfly 17.0.1.Final 上的部署问题
- .net - Xunit 未在 Visual Studio 2019 中运行某些测试
- maven - [Intellij][Maven] 如何使用项目作为对另一个项目的依赖
- robotframework - 使用Robot框架评估后如何使用0获取月份格式
- sql - PostgreSQL,插入前检查重复
- python - 使用 Python 构建 RPC 服务集群
- python - 无法从列表中添加 networkx 节点和链接
- reactjs - 如何使用反应钩子在 setInterval 中获取更新的道具?
- ruby-on-rails - 由于 Chrome,我被迫重新启动 Rails Server 以更新控制器中的修改
- javascript - jQuery on button click, 在同一页面上重定向但到不同的部分/面板