javascript - 将 ref 反应到没有钩子的功能组件?
问题描述
我试图找出一个元素当前是否可见。问题是我需要该组件的引用,但它是一个功能组件,所以我收到错误Function components cannot be given refs
class ShowPosts extends Component {
constructor(props) {
super(props);
this.state = {
posts: [],
sorting:'desc',
lastPostDate:'none',
hasMore:false,
pageNumber:0
};
this.lastPostRef = React.createRef();
}
render(){
//Irelevant code above
postList = posts.map((post, k) =>
{
if(k===posts.length-1)
return <PostCard ref={this.lastPostRef} post={post} key={k} />
return <PostCard post={post} key={k} />
}
}
...
编辑: 我试图找出是否通过滚动(尝试实现分页)到达该元素。所以我会在我的滚动监听器中使用它
onScroll()
{
console.log(`Last post is ${this.lastPost}`);
if(this.lastPostRef)
{
var rect = this.lastPostRef.getBoundingClientRect();
var elemTop = rect.top;
var elemBottom = rect.bottom;
console.log(elemTop < window.innerHeight && elemBottom >= 0);//Check if element is visible
}
}
解决方案
您可以使用 forwardRef 在功能组件内传递 ref。在此处查看文档
const PostCard = React.forwardRef((props, ref) => (
...
));
推荐阅读
- android - 无法删除目录:apollo-codegen
- javascript - nodejs中的三元运算符
- java - 如何使用给定对中的键从键/值对列表中检索值?
- javascript - 动态更改单选按钮值
- mysql - 如何在 SQL 中查询这些多条件?
- pandas - 为什么计数的行为不同而 GroupBy 对象的唯一性不同?
- c# - 重新加载场景时忽略 OnMouseDown
- python - Python 服务器可以跨 Apache 工作人员缓存数据库查询吗?
- python - 如何以不规则的间隔切片列表?
- wordpress - 如何解决flutter wordpress json api错误?