【发布时间】:2020-05-27 20:49:28
【问题描述】:
我无法使用相同的事件处理程序将参数从子组件传递到父组件。
我的组件树遵循以下结构:
- 产品列表
- ProductsGrid
- 分页栏
在 ProducList 组件中我有这个事件处理程序
handlePagination = (index) => { bla bla bla }
<PaginationBar
OnPagination={(index) => this.handlePagination(index)}
pages={this.state.pages}
/>
渲染页面时在分页栏中。
render() {
return (
<nav aria-label="Catalog page navigation">
<ul className="pagination">
<li className={this.navButtonEnabled(0)} key="page-item-0">
<a
className="page-link"
onClick={this.props.OnPagination(0)}
href="#"
aria-label="Previous"
>
<span aria-hidden="true">Previous 3</span>
</a>
</li>
<li className={this.navButtonEnabled(1)} key="page-item-1">
<a
className="page-link"
onClick={this.props.OnPagination(1)}
href="#"
>
<span aria-hidden="true">
{this.navButtonDisplay(this.props.pages.navigation[1])}
</span>
</a>
</li>
<li className={this.navButtonEnabled(2)} key="page-item-2">
<a
className="page-link"
onClick={this.props.OnPagination(2)}
href="#"
>
<span aria-hidden="true">
{this.navButtonDisplay(this.props.pages.navigation[2])}
</span>
</a>
</li>
<li className={this.navButtonEnabled(3)} key="page-item-3">
<a
className="page-link"
onClick={this.props.OnPagination(3)}
href="#"
>
<span aria-hidden="true">
{this.navButtonDisplay(this.props.pages.navigation[3])}
</span>
</a>
</li>
<li className={this.navButtonEnabled(4)} key="page-item-4">
<a
className="page-link"
onClick={this.props.OnPagination(4)}
href="#"
aria-label="Next"
>
<span aria-hidden="true">Next 3</span>
</a>
</li>
</ul>
</nav>
);
}
}
在 onClick 事件中,我使用索引号(这是我要传递的参数)调用事件处理程序,根据单击的按钮正确呈现 ProductsGrid。但它根本不起作用,我尝试了几种方法,我只想通过参数传递一个数字以用于提升事件处理程序。我做错了什么?
这是控制台中出现的错误。
react_devtools_backend.js:6 警告:在现有状态转换期间无法更新(例如在render 内)。渲染方法应该是 props 和 state 的纯函数。
在分页(由目录创建)
在目录中(由 App 创建)
in main(由 App 创建)
应用内
在渲染过程中我没有更改任何状态,事件处理程序会在单击按钮时更改状态。这不是渲染过程。
【问题讨论】:
-
onClick={this.props.OnPagination(0)}这将在渲染期间调用onPagination。我认为将 JSX 中的每个onClick更改为onClick={() => this.props.OnPagination(4)}应该可以解决此问题。
标签: reactjs parameters eventhandler lifting