栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用ReactJS嵌入Gist

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用ReactJS嵌入Gist

Gist嵌入脚本用于

document.write
将构成嵌入式Gist的HTML编写到文档的HTML中。但是,当您的React组件添加
script
标签时,将其写入文档为时已晚。

虽然您无法将Gist嵌入脚本动态添加到页面中,但是您 可以 通过JSONP 获得Gist 的 内容
并将其自己写入文档中。这是一个具有

gist
属性和可选
file
属性并为您呈现要点的组件。

var EmbeddedGist = React.createClass({  propTypes: {    gist: React.PropTypes.string.isRequired, // e.g. "username/id"    file: React.PropTypes.string // to embed a single specific file from the gist  },  statics: {    // Each time we request a Gist, we'll need to generate a new    // global function name to serve as the JSONP callback.    gistCallbackId: 0,    nextGistCallback: function() {      return "embed_gist_callback_" + EmbeddedGist.gistCallbackId++;    },    // The Gist JSON data includes a stylesheet to add to the page    // to make it look correct. `addStylesheet` ensures we only add    // the stylesheet one time.    stylesheetAdded: false,    addStylesheet: function(href) {      if (!EmbeddedGist.stylesheetAdded) {        EmbeddedGist.stylesheetAdded = true;        var link = document.createElement('link');        link.type = "text/css";        link.rel = "stylesheet";        link.href = href;        document.head.appendChild(link);      }    }  },  getInitialState: function() {    return {      loading: true,      src: ""    };  },  componentDidMount: function() {    // Create a JSONP callback that will set our state    // with the data that comes back from the Gist site    var gistCallback = EmbeddedGist.nextGistCallback();    window[gistCallback] = function(gist) {      if (this.isMounted()) {        this.setState({          loading: false,          src: gist.div        });        EmbeddedGist.addStylesheet(gist.stylesheet);      }    }.bind(this);    var url = "https://gist.github.com/" + this.props.gist + ".json?callback=" + gistCallback;    if (this.props.file) {      url += "&file=" + this.props.file;    }    // Add the JSONP script tag to the document.    var script = document.createElement('script');    script.type = 'text/javascript';    script.src = url;    document.head.appendChild(script);  },  render() {    if (this.state.loading) {      return <div>loading...</div>;    } else {      return <div dangerouslySetInnerHTML={{__html: this.state.src}} />;    }  }});

您可以像这样使用它:

var app = (  <div>    <EmbeddedGist gist="BinaryMuse/a57ae1a551472e06b29a" file="restful.js" />    <hr />    <EmbeddedGist gist="BinaryMuse/bb9f2cbf692e6cfa4841" />  </div>);React.render(app, document.getElementById("container"));

看看这个在JSfiddle上工作的示例:http
:
//jsfiddle.net/BinaryMuse/nrb6zxfw/

改善此问题的一种方法是,确保

EmbeddedGist
已更改其属性
gist
file
属性的现有组件将通过挂接到来更新以使用新数据
componentWillReceiveProps



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号