import React from 'react' import { init } from '@waline/client' import BLOG from '@/blog.config' import { useRouter } from 'next/router' /** * @see https://waline.js.org/guide/get-started.html * @param {*} props * @returns */ const WalineComponent = (props) => { const walineInstanceRef = React.useRef(null) const containerRef = React.createRef() const router = useRouter() const updateWaline = url => { walineInstanceRef.current?.update(props) } React.useEffect(() => { walineInstanceRef.current = init({ ...props, el: containerRef.current, serverURL: BLOG.COMMENT_WALINE_SERVER_URL }) router.events.on('routeChangeComplete', updateWaline) const anchor = window.location.hash if (anchor) { // 选择需要观察变动的节点 const targetNode = document.getElementsByClassName('wl-cards')[0] // 当观察到变动时执行的回调函数 const mutationCallback = (mutations) => { for (const mutation of mutations) { const type = mutation.type if (type === 'childList') { const anchorElement = document.getElementById(anchor.substring(1)) if (anchorElement && anchorElement.className === 'wl-item') { anchorElement.scrollIntoView({ block: 'end', behavior: 'smooth' }) setTimeout(() => { anchorElement.classList.add('animate__animated') anchorElement.classList.add('animate__bounceInRight') observer.disconnect() }, 300) } } } } // 观察子节点 变化 const observer = new MutationObserver(mutationCallback) observer.observe(targetNode, { childList: true }) } return () => { walineInstanceRef.current?.destroy() router.events.off('routeChangeComplete', updateWaline) } }, []) return
} export default WalineComponent