javascript - Refs 的功能组件中的无效挂钩调用
问题描述
我正在尝试使用一个名为的包react-bootstrap-table
来构建带有标签的表结构。我在尝试处理将基于类的组件与功能组件相结合的引用时遇到问题。使用表格,我有创建标签的功能组件,当您单击每个单独的标签时,我希望单击该标签以填充输入作为原始类输入的一部分。
我目前收到无效的钩子调用,所以我想知道是否有人有任何建议,看看我是否理解参考钩子的反应是否正确。
引导表
<BootstrapTable data={this.state.literature}
striped
hover
pagination
ignoreSinglePage
search
version='4'
>
<TableHeaderColumn isKey dataField='title' width='50%'>Title</TableHeaderColumn>
<TableHeaderColumn dataField='tag' ref='tagCol' dataFormat = {tagFormatter} filter = { { type: 'TextFilter', delay: 300 }} width='12%'>Tags</TableHeaderColumn>
功能组件
// Tag formats
// Run a mapper on the tag column to generate x number of Tags for tag
function tagFormatter(cell, row) {
const tagCol = React.useRef(null);
const handleTagClick = (tag) => {
tagCol.applyFilter(tag);
}
return (
<div>
{cell.map((tag, i) =>
<span className="badge badge-pill badge-info" onClick={ e => this.handleTagClick(tag) } key = {i}>tag</span>
)
}
</div>
);
}
解决方案
正如@LincolnAnderson 所指出的,您可能打算写ref={tagCol}
第二个TableHeaderColumn
。
此外,在handleTagClick
函数内部,您ref
以错误的方式访问。
引用React文档:
本质上,useRef 就像一个“盒子”,可以在其
.current
属性中保存一个可变值。
因此,正确的代码是:
const handleTagClick = (tag) => {
tagCol.current.applyFilter(tag);
}
推荐阅读
- php - 两个嵌套的 foreach
- java - Android - 资源未链接
- c# - Linq查找字符串列表2中存在的字符串列表1的所有元素
- i2c - STM32F030F4 在 Bare Metal 中无法正确启动 I2C1
- javascript - 带有复选框的 Javascript localStorage 联系人
- javascript - Javascript 项目出现空错误。(空==0?!)
- javascript - 为什么这个 Javascript 函数没有打印到我的 HTML 文档中?
- c++ - invoke_result_t<> 没有将 lambda 与引用参数匹配
- python - 使用 PyGaze 时没有名为“psychopy”的模块
- google-app-engine - 如何使用删除方法从谷歌数据存储以及我的 html 页面中删除元素?