reactjs - 在 Nextjs/React 应用程序中实现 Facebook Sdk 评论插件
问题描述
我已经实现了评论插件,并且通过自定义挂钩可以正常工作。
但是,当使用 Next Link 在页面之间导航时,不会加载评论。所以,我实施了一个hack来重新加载页面,但这不是理想的解决方案。
对 React/NextJs 有更深入了解的人可以帮助我提供更清洁、性能更好的解决方案吗?
使用 Facebook.js
import { useEffect } from 'react';
const useFacebook = ({ addTrack }) => {
useEffect(() => {
const facebookScript = document.createElement("script");
facebookScript.id = 'fb-sdk';
facebookScript.async = true;
facebookScript.defer = true;
facebookScript.crossOrigin = "anonymous";
facebookScript.nonce = "5JOEwLPT";
const track = addTrack ? `&appId=${process.env.NEXT_PUBLIC_FACEBOOK_ID}&autoLogAppEvents=1` : '';
facebookScript.src = `https://connect.facebook.net/pt_BR/sdk.js#xfbml=1&version=v10.0${track}`;
document.body.appendChild(facebookScript);
const href = window.location.href;
if (href.indexOf('refresh') <= 0) {
window.location.href = href+'?refresh';
}
return () => {
document.body.removeChild(facebookScript);
}
}, [addTrack]);
};
export default useFacebook;
index.js
import Head from 'next/head';
import FBComments from '../components/facebook/FBComments';
import useFacebook from '../hooks/useFacebook';
import styles from '../styles/Home.module.css';
export default function Home({ posts }) {
useFacebook({ addTrack: false });
return (
<main className={styles.main}>
<ul>
{ posts && posts.map(post => (
<li key={post.id}>
<h1>{post.title}</h1>
<FBComments
href={ `http://localhost:3000/post/${post.id}` }
numPosts={10}
dataLazy={true}
width="100%"
/>
</li>
)
)}
</ul>
</main>
);
}
export async function getStaticProps() {
const posts = [
{ id: 1, title: 'Post 1' },
{ id: 2, title: 'Post 2' },
{ id: 3, title: 'Post 3' },
{ id: 4, title: 'Post 4' },
];
return {
props: {
posts,
},
};
}
FBComments.js
import React from 'react';
import styles from '../../styles/FBComments.module.css';
const FBComments = ({ width, href, numPosts, dataLazy }) => {
return (
<>
<div className="fb-comments" data-href={href} data-numposts={numPosts} data-width={width} data-lazy={dataLazy}>
</div>
</>
);
};
export default FBComments;
相关答案:在以下示例中,建议使用FB.XFBML.parse(); 但我无法让它工作。
解决方案
推荐阅读
- c++ - 如何保留 MPI 和非 MPI 版本?
- python - 使用 elementtree 根据孙子标签查找元素
- nginx - nginx重定向在位置指令内不起作用
- groovy - 如何从 Artifactory 只下载文件(没有文件夹)
- r - 如何绘制一个框(或圆圈)以强调 R 中图形的特定区域?
- python - 如何从 ViUR 中的代码将条目附加到关系骨
- javascript - Angular Reactive Form 选择多个选定的值到复选框
- javascript - 按相同值创建对象数组
- r - 如何找到半径 250 米附近有多少个位置
- html - 使用 require 在 Angular 11 应用程序中加载图像