如何使用 ReactJS 嵌入 Gist

2024-02-06

我正在尝试使用 ReactJS 嵌入 Gist,但出现以下错误:

无法对“文档”执行“写入”:除非显式打开,否则无法从异步加载的外部脚本写入文档。

这是我的组件:

var EmbeddedGist = React.createClass({
    render: function() {
        return (
            <div id="gist-container" />
        );
    },

    componentDidMount: function() {
        var src = this.props.srcUrl + ".js";
        $('#gist-container').html('<script src="' + src + '"></script>');
    }
});

我从另一个组件中调用它,如下所示:

<EmbeddedGist srcUrl="https://gist.github.com/awalGarg/a5bd02978cecf3703f61" />

关于如何实现这项工作有什么想法吗?


Gist 嵌入脚本使用document.write将构成嵌入 Gist 的 HTML 写入文档的 HTML 中。然而,当你的 React 组件添加script标签,现在写入文档为时已晚。

虽然您无法将 Gist 嵌入脚本动态添加到您的页面,但您can得到contents通过 JSONP 获取要点并自己将其写入文档中。这是一个需要一个组件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/: http://jsfiddle.net/BinaryMuse/nrb6zxfw/ http://jsfiddle.net/BinaryMuse/nrb6zxfw/

改进这一点的一种方法是确保现有的EmbeddedGist具有其gist or file道具更改将通过挂钩更新以使用新数据componentWillReceiveProps.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 ReactJS 嵌入 Gist 的相关文章

  • 以编程方式更改 Redux-Form 字段值

    当我使用redux formv7 我发现没有办法设置字段值 现在在我的form 我有两个select成分 当第一个时 第二个的值就会很清楚select元件值改变 在类渲染中 div div site div div div div
  • 如何在 Gatsby 页面上包含本地 JavaScript?

    我是一个完全的 React 新手 我想这里有些基本的东西我不太明白 默认的 Gatsby 页面如下所示 有没有办法像这样使用本地 js 文件 我想要实现的是让反应忽略script js但仍然让客户端使用它 默认的 Gatsby 页面看起来像
  • axios 请求中未发送正文数据

    我试图通过 axios 请求将数据发送到我的后端脚本 但正文看起来是空的 这是前端发送的请求 axios request method GET url http localhost 4444 next api headers Authori
  • 我点击的号码没有出现在反应项目的屏幕上

    当我尝试在屏幕中呈现点击的数字时 该数字没有出现 但它确实可以在控制台中显示 我不知道如何修复它应该在屏幕上 号码 旁边应用的号码 import render from testing library react import React
  • 将 Firebase FCM 添加到 ReactJS 应用程序

    我正在尝试向我的 ReactJS 应用程序中的用户发送推送通知 我已添加 firebase 请求用户通知权限 这正在发挥作用 但现在我想注册设备令牌 但这给了我错误 消息传递 我们无法注册默认的 Service Worker 无法注册 Se
  • 如何在 webpack 中渲染嵌套的 SASS?

    采取以下CSS MyComponent color blue Button color red 以及以下 React 组件 import React from react import classes from MyComponent sc
  • 如何在reactjs中禁用未来日期?

    我没有使用任何日期选择器 代码仍然工作正常 到目前为止 我已经选择了输入类型 一切正常 现在我想禁用未来的日期 我怎么做 div div
  • 在 javascript 文件中设置 firebase-admin sdk

    我的最终目标是使用用户 ID 获取用户电子邮件 到目前为止 我发现我需要使用 firebase admin SDK 现在我有这个代码 var admin require firebase admin var serviceAccount r
  • 有没有办法在 React.render() 函数中渲染多个 React 组件?

    例如我可以这样做 import React from react import PanelA from panelA jsx import PanelB from panelB jsx React render
  • 使用代理时,React 应用程序正在不同位置查找静态文件

    我用过npx create react app my app创建一个反应应用程序 我用过的npm run build构建应用程序并使用它进行部署serve s build 我正在使用代理服务器来公开我的应用程序 我的 httpd 配置如下所
  • ReactCSSTransitionGroup 组件WillLeave 未调用

    我尝试使用 ReactCssTransition 但不知何故该事件没有被调用 componentWillLeave 这是我的组件 import React Component from react import TransitionGrou
  • ReactJs 警告:不推荐使用改变“style”。考虑事先克隆它

    我收到以下警告 inWarning div was passed a style object that has previously been mutated Mutating style is deprecated Consider c
  • 如何使用draft.js更改光标位置?

    我想知道在键盘命令上完成文本插入后如何更改 Draft js 中的光标位置 因此我目前正在使用 handleKeyCommand cmd 每当用户按下特定按钮时插入自定义文本块 接下来我尝试了以下操作 currentState this s
  • 如何在 React 中测试表单提交?

    我有以下 React 组件 export default class SignUpForm extends React Component doSignupForm event Some API call render return div
  • 如何在 React 组件测试中使用 data-testid 属性?

    我正在对一个简单的反应组件进行组件测试 我想渲染该组件 然后对其进行一些测试 问题是cy get 似乎没有找到基于的组件data testid属性 我用一个简单的方法测试了它div和div能找到就好了 我在检查时也注意到DOM在 cypre
  • 将 firestore 中的数据分配给变量

    我尝试使用 get doc 函数将 firestore 数据库中的变量分配给它们所尊重的值 我注意到它不会分配或更新这些值 我尝试使用异步和等待 但似乎无法使其工作 getFromDatabase nameOfCollection name
  • React - 检查元素在 DOM 中是否可见

    我正在构建一个表单 用户需要回答一系列问题 单选按钮 然后才能进入下一个屏幕 对于字段验证 我使用 yup npm 包 和 redux 作为状态管理 对于一种特定场景 组合 会显示一个新屏幕 div 要求用户进行确认 复选框 然后用户才能继
  • 仅显示某些路由的组件 - React

    我正在 React 中开发一个带有登录界面的网站 该网站显示一个自定义导航组件 但是我不希望它显示在主路线 即登录页面 上 但据我了解 静态组件不会在路线更改时重新呈现 这准确吗 我正在使用 React Router 来处理所有路由 这是我
  • iOS 11 浏览器图像错误

    在 iOS 11 中滚动页面时出现以下错误 在 Firefox Safari 和 Chrome 中 在 Android 设备中 不会发生该错误 这些是背景图像 我不知道这是否是导致错误的原因 图 2 显示了图像在 Android 中的用途和
  • 将 Sweet Alert 弹出窗口添加到 React 组件中的按钮

    我为 Bootstrap 和 React 找到了这个完美的 Sweet Alert 模块 我在 Meteor 应用程序中使用它 http djorg83 github io react bootstrap sweetalert http d

随机推荐

  • 从 C# 中的 List 中选择 N 个随机元素

    我需要一个快速算法从通用列表中选择 5 个随机元素 例如 我想从 a 中获取 5 个随机元素List
  • 在 Angular JS 上悬停时添加类

    我试图在悬停时添加一个类li下面代码中的 Angular 元素 li class pull left a href interna html img src assets images cola png a li 这就是页面将具有的所有功能
  • 如何使用AngularJS动画实现翻转效果?

    实现这一目标的最佳方式是什么翻转效果 http davidwalsh name demo css flip php使用 AngularJS 动画 我希望点击时出现翻转效果 每次单击它时 它都应该翻转到另一侧 我想 理想情况下 我正在寻找使用
  • MySQL ALTER TABLE 在非常大的表上 - 运行它安全吗?

    我有一个 MySQL 数据库 其中有一个包含 400 万行的 MyISAM 表 我大约每周更新一次此表 添加大约 2000 个新行 更新后 我将表更改如下 ALTER TABLE x ORDER BY PK DESC 我按主键字段按降序对表
  • 使用实体框架时,为什么我的带有数据注释的列不会映射

    我有一堂课 看起来像这样 public class Analyst Column Internal ID public int ID get set if this is named like the column it works Col
  • Apache Tomcat WebService 中的服务出现故障

    在 Web 服务中添加此方法后 我的 apache tomcat Web 服务出现错误服务 public String getAllEvent JSONArray jsonArray new JSONArray try Class forN
  • 在 sqlalchemy 中定义列 func.count 的名称

    有两张桌子 Tbl1 Table tbl 1 metadata Column id Integer primary key True Column user id Integer ForeignKey user id nullable Fa
  • 如何在 Node.js 中获取服务器目录之上的文件

    我正在尝试使用 node js 服务器提供音频文件 问题是 我希望能够获取计算机中的任何音频文件 但我不知道如何使 html 中的音频元素与服务器上方的目录一起使用 有this https stackoverflow com questio
  • Laravel classloader.php 错误无法打开流:没有这样的文件或目录

    我能够正常运行 php artisan migrate 如果我使用 Request all 我能够获取所有表单输入 但是当我尝试将数据添加到我的 mysql 数据库表时 我收到以下错误 ErrorException in ClassLoad
  • Eclipse 片段项目是否有与 BundleActivator 等效的工具?

    我正在构建一个 Eclipse 插件 它在常规插件项目中提供一组核心功能 我通过片段项目提供的可选功能 但我需要片段在启动时向主插件注册自己 我无法在片段项目中拥有 Bundle Activator 所以我想知道是否有一些替代机制来声明一个
  • 回归分析中的分类特征数据和序数特征数据差异?

    在进行回归分析时 我试图完全理解分类数据和序数数据之间的差异 目前 已经明确的是 分类特征和数据示例 颜色 红 白 黑为什么分类 red lt white lt black逻辑上是不正确 序数特征和数据示例 状况 旧的 翻新的 新的为什么序
  • 带元胞数组的 Matlab 动态字段名结构

    我如何使用动态字段名访问以下结构路径 var refxtree CaseDefinition FlowSheetObjects MaterialStreamObjects 8 MaterialStreamObjectParams Press
  • 在使用 Jest 进行测试之前等待 React 组件状态更新

    我有一个组件handleAdd功能 该函数调用一个库 该库又调用axios并返回一个承诺 一旦解决了这个问题 handleAdd 方法更新组件状态 进而渲染子组件 换句话说 它首先检查服务器以确保在本地显示该项目之前已添加该项目 使用 Je
  • Python3 将所有字符转换为 HTML 实体

    我正在使用Python3 我想知道是否有一个模块或默认函数可以将文本的所有字符转换为html实体 甚至字母和数字 因为我不想为此制作翻译映射 解决了 正如 justhalf 告诉我的 我通过创建这个函数找到了解决方案 def htmlEnt
  • 如何修复“对象不是此领域架构的一部分”

    我正在尝试设置一个使用Realm数据库 但我似乎无法使其工作 我也禁用了Instant Run但这也没有解决问题 这是我的代码文件 应用程序级别的build gradle apply plugin com android applicati
  • 如何在 OMNeT++ 中创建随机连接图?

    我正在尝试创建一个具有随机连接节点的图 节点应该随机连接 如果一个节点已经连接到另一个节点 则不应使用不同的连接再次连接到同一节点inout port 在文档中 https doc omnetpp org omnetpp manual se
  • 如何用c语言编写一个简单的malloc函数

    作为操作系统的作业 我们必须用 C 编程语言编写自己的 malloc 和 free 代码 我知道如果我要求它的代码 我就没有必要学习 我面临的问题是不知道在哪里包含初始化 50000 字节的 char 数组并使两个列表空闲和使用 在我的函数
  • 如何生成动态数组

    我必须生成一个动态菜单来从数据库中获取数据并将结果存储在动态数组中 如何在 php 中实现这一点 PHP 中的数组默认是动态的 只需向其中添加更多项目即可 如本例所示 假设数据库为MYSQL result mysql query menu
  • json.decode() 输入意外结束(在字符 1 处)

    我在登录用户时遇到了 flutter 中的匿名关闭错误 前几天还可以 但现在不行了 不知道为什么 所以请提前提供帮助和感谢 每当我填写详细信息并点击登录按钮时 它都会抛出以下错误 E flutter 2914 ERROR flutter s
  • 如何使用 ReactJS 嵌入 Gist

    我正在尝试使用 ReactJS 嵌入 Gist 但出现以下错误 无法对 文档 执行 写入 除非显式打开 否则无法从异步加载的外部脚本写入文档 这是我的组件 var EmbeddedGist React createClass render