she*_*eki 5 javascript facebook npm reactjs
我有一个客户端渲染反应应用程序.我想在我的页面上显示一个facebook发送按钮.
开发者页面上给出的说明并没有告诉我如何操作
https://developers.facebook.com/docs/plugins/send-button#configurator
另外,我没有找到facebook为他们的SDK发布的npm兼容包.那么如何在反应应用程序中包含SDK呢?
编辑:我尝试在反应中使用一些异步加载器.
import React, { Component } from 'react';
import scriptLoader from 'react-async-script-loader';
@scriptLoader(
'https://connect.facebook.net/es_ES/sdk.js#xfbml=1&version=v2.5',
)
class FacebookSendButton extends Component {
componentDidMount() {
const { isScriptLoaded, isScriptLoadSucceed } = this.props;
if (isScriptLoaded && isScriptLoadSucceed) {
console.log('script load success from didMount');
}
}
componentWillReceiveProps({ isScriptLoaded, isScriptLoadSucceed }) {
if (isScriptLoaded && !this.props.isScriptLoaded) { // load finished
if (isScriptLoadSucceed) {
console.log('script load success from receiveProps');
}
}
}
render() {
return (
<div>
BEFORE FB ROOT.
<div className="fb-send"
dataHref="http://www.your-domain.com/your-page.html"
dataLt ayout="button_count"
/>
<div id="fb-root"></div>
</div>
);
}
}
export default FacebookSendButton;
Run Code Online (Sandbox Code Playgroud)
这不会呈现Facebook发送按钮.
加载FB SDK后,它会解析整个页面标记,以查找包含特殊fb-*类的元素.由于FB脚本在初始化模块时加载,因此在最终安装组件之前可能会加载SDK.要让它重新处理DOM,您需要在以下内容中添加以下内容componentDidMount:
if (window.FB) {
// Read the entire document for `fb-*` classnames
FB.XFBML.parse();
}
Run Code Online (Sandbox Code Playgroud)
当然,您可能不希望每次发送按钮时都解析整个文档.您可以通过创建ref要搜索的DOM节点来缩小搜索范围,然后将其传递给parse()方法.
componentDidMount() {
const { isScriptLoaded, isScriptLoadSucceed } = this.props;
if (isScriptLoaded && isScriptLoadSucceed && window.FB) {
window.FB.XFBML.parse(this._scope);
}
}
componentWillReceiveProps({ isScriptLoaded, isScriptLoadSucceed }) {
if (isScriptLoaded && !this.props.isScriptLoaded) { // load finished
if (isScriptLoadSucceed && window.FB) {
window.FB.XFBML.parse(this._scope);
}
}
}
render() {
return (
<div ref={(s) => this._scope = s}>
<div id="fb-root"></div>
<div
className="fb-send"
data-href="http://www.your-domain.com/your-page.html"
data-layout="button_count"
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
你会注意到我在这里使用了功能引用的新方法.ref="somestr"React团队正在弃用和劝阻命名的引用(例如).
我有一个hacky版本的工作从以下要点:https://gist.github.com/andrewimm/9fdd0007c3476446986a9f600ba4183f
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |