refactor to use functional component

This commit is contained in:
srgooglo 2022-06-06 10:29:42 +02:00
parent 9e8bb06921
commit c705f11b7e

View File

@ -1,39 +1,22 @@
import React from "react"
import PropTypes from "prop-types"
import classnames from "classnames"
import IntersectionObserver from "intersection-observer-polyfill"
import "./index.less"
export default class LoadMore extends React.Component {
constructor() {
super(...arguments)
this.insideViewportCb = this.insideViewportCb.bind(this)
}
export default React.forwardRef((props, ref) => {
const {
className,
children,
hasMore,
loadingComponent,
noResultComponent,
} = props
static propTypes = {
onBottom: PropTypes.func,
fetching: PropTypes.bool,
hasMore: PropTypes.bool,
NoResult: PropTypes.func,
Footer: PropTypes.func
}
let observer = null
componentDidMount() {
try {
const node = document.getElementById("bottom")
this.observer = new IntersectionObserver(this.insideViewportCb)
this.observer.observe(node)
} catch (err) {
console.log("err in finding node", err)
}
window.addEventListener("scroll", this.handleOnScroll)
}
insideViewportCb(entries) {
const { fetching, onBottom } = this.props
const insideViewportCb = (entries) => {
const { fetching, onBottom } = props
entries.forEach(element => {
if (element.intersectionRatio > 0 && !fetching) {
@ -42,23 +25,26 @@ export default class LoadMore extends React.Component {
})
}
componentWillUnmount() {
if (this.observer) {
this.observer = null
}
React.useEffect(() => {
try {
const node = document.getElementById("bottom")
observer = new IntersectionObserver(insideViewportCb)
observer.observe(node)
} catch (err) {
console.log("err in finding node", err)
}
render() {
const {
className,
children,
hasMore,
loadingComponent,
noResultComponent,
} = this.props
return () => {
observer = null
}
}, [])
return <div className="infinite-scroll">
<div className={classnames(className)}>
<div
className={classnames(className)}
ref={ref}
>
{children}
</div>
@ -78,5 +64,4 @@ export default class LoadMore extends React.Component {
{noResultComponent ? React.createElement(noResultComponent) : "No more result"}
</div>
</div>
}
}
})