如何将Twitter小部件集成到Reactjs中?

Fin*_*nch 19 twitter widget reactjs

我想将Twitter小部件添加到React中,但我不知道从哪里开始或如何做到这一点.我是React JS的新手.

这是代码的HTML版本:

<div class="Twitter">
  <a class="twitter-timeline" href="https://twitter.com/<%= @artist.twitter %>" data-widget-id="424584924285239296" data-screen-name='<%= @artist.twitter %>'>Tweets by @<%= @artist.twitter %></a>
  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的:

React.DOM.div
  className: 'Twitter'
  children: [
    React.DOM.a
      className: 'twitter-timeline'
      href: "https://twitter.com/" + artist.twitter
      'data-widget-id': "424584924285239296" 
      'data-screen-name': artist.twitter
      children: 'Tweets by ' + artist.twitter
    React.DOM.script
      children: ...
  ]
Run Code Online (Sandbox Code Playgroud)

我打算添加点(...)所在的脚本,但这不起作用.谢谢您的帮助.

Raj*_*Rao 16

首先在index.html中加载Widget JS(在React脚本之前).然后在您的组件中,只需执行以下操作.小部件JS将重新扫描DOM.

componentDidMount: function() {
  twttr.widgets.load()
}
Run Code Online (Sandbox Code Playgroud)

请参阅:https://dev.twitter.com/web/javascript/initialization

  • 来自 twitter 文档:“为了获得更好的性能,传递一个 HTMLElement 对象以将搜索限制为仅元素的子元素。示例:``` twttr.widgets.load( document.getElementById("container") );``` (2认同)

Dan*_*Dan 6

这适合我!

请注意,我使用React v0.14和ECMAScript 2015(又名ES6)与Babel.

index.html(在body标签之后):

<script>window.twttr = (function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0],  t = window.twttr || {};
  if (d.getElementById(id)) return t;
  js = d.createElement(s); js.id = id;
  js.src = "https://platform.twitter.com/widgets.js";
  fjs.parentNode.insertBefore(js, fjs);
  t._e = []; t.ready = function(f) {
    t._e.push(f);
  };
  return t;
}(document, "script", "twitter-wjs"));
</script>
Run Code Online (Sandbox Code Playgroud)

Twitter组件:

const Twitter = () => (
  <a href="https://twitter.com/your-twitter-page"
    className="twitter-follow-button"
    data-show-count="false"
    data-show-screen-name="false"
  >
  </a>
);
Run Code Online (Sandbox Code Playgroud)

一些React组件(使用Twitter按钮):

class SomeReactComponent extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div>
        <Twitter />
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要一个自定义按钮,您可以简单地执行此操作:

const Twitter = () => (
  <a href="https://twitter.com/intent/tweet?via=twitterdev">
    <i className="zmdi zmdi-twitter zmdi-hc-2x"></i>
  </a>
);
Run Code Online (Sandbox Code Playgroud)


小智 1

恕我直言,你应该把它分成两部分。部分代码可以以某种方式在 React 组件中呈现

/**
 * @jsx React.DOM
 */
var React = require('react');
var twitterWidget = React.createClass({
    render: function () {
        return (
            <div class="Twitter">
                <a class="twitter-timeline" 
                   href={this.props.link} 
                   data-widget-id={this.props.widgetId} 
                   data-screen-name={this.props.screenName} > 

                   Tweets by {this.props.screenName}
                </a>
            </div>
        );
    }
});
React.renderComponent(<twitterWidget link="..." widgetId="..." />, document.getElementById('containerId');
Run Code Online (Sandbox Code Playgroud)

您的 script 标签可以作为单独的 React 组件或作为普通 HTML 放置在结束 body 标签上方。