我正在使用 ReactJS(由 Facebook 开发),我目前在显示 Facebook 社交插件的评论部分时遇到问题......有点讽刺,但嘿,他们自己没有为react制作插件。
无论如何,我已经在我的代码中插入了不同的元素来添加注释部分。当我加载页面时,我可以看到该部分正在加载!(不到一秒钟)但它很快消失了。我检查了 facebook 生成的代码,发现它添加到我的元素类中:FB_hide_iframes。我尝试删除它,该部分显示在我的页面中!
问题是我不知道如何控制添加到我的组件中的类。
正如你所看到的,评论部分是存在的,但它被我没有放在那里的类 FB_hide_iframes 隐藏。
这是在我的主页 (home.js) 中添加该部分的代码
componentDidMount() {
...
window.fbAsyncInit = function () {
FB.init({
appId: 'XXXXXXXXXXXXXX',
xfbml: true,
version: 'v2.6'
});
};
(function (d, s, id) {
console.log('test');
const fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
const js = d.createElement(s); js.id = id;
js.src = '//connect.facebook.net/fr_CA/sdk.js#xfbml=1&version=v2.6&appId=XXXXXXXX';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
FB.XFBML.parse();
...
}
在我添加的渲染函数中:
render() {
<div id="fb-root"></div>
...
<div className="fb-comments"
data-href="MY-URL"
data-width="1000"
data-numposts="10"
data-order-by="reverse_time">
</div>
有人有想法吗?
编辑:评论部分正在显示,但是当我进入我网站的另一个部分并卷土重来(单页应用程序)时,它消失了。这是我的组件的代码:
import React, { Component, PropTypes } from 'react';
import { mediaQueries } from '../../decorators';
@mediaQueries
export default class FacebookComments extends Component {
static propTypes = {
mediaQueries: PropTypes.func.isRequired,
appId: PropTypes.string.isRequired,
version: PropTypes.string.isRequired,
url: PropTypes.string.isRequired,
};
state = {
mobile: false,
}
componentDidMount() {
this.props.mediaQueries('(max-width: 950px)', () => {
this.setState({
mobile: true,
});
});
this.props.mediaQueries('(min-width: 951px)', () => {
this.setState({
mobile: false,
});
});
FB.init({
appId: 'XXXXXXXXXXXXXXXXX',
xfbml: true,
version: 'v2.6',
});
(function (d, s, id) {
const fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
const js = d.createElement(s); js.id = id;
js.src = '//connect.facebook.net/fr_CA/sdk.js';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
componentDidUpate() {
FB.XFBML.parse();
}
render() {
const componentWidth = this.state.mobile ? '95%' : '75%';
return (
<div style={{ width: componentWidth }}>
<div id="fb-root"></div>
<div className="fb-comments"
data-href={this.props.url}
data-width="100%"
data-numposts="10"
data-order-by="reverse_time">
</div>
</div>
);
}
}
luschn 我不知道也不明白你在说什么。我在 fbAsyncInit 中放置了一个 console.log 并且它从未显示过,这意味着它永远不会被调用。我在网上查了一下,没有相关信息。网上的人只会说:把它放在你的代码中,让魔法发生......这就是我从我的代码中删除它的原因。编辑#2:我所有的 Facebook 社交插件都在这段代码中。