我有一个相对简单的问题,试图将内联脚本添加到React组件.到目前为止我所拥有的:
'use strict'; import '../../styles/pages/people.scss'; import React, { Component } from 'react'; import DocumentTitle from 'react-document-title'; import { prefix } from '../../core/util'; export default class extends Component { render() { return (); } }; People
我也尝试过:
这两种方法似乎都没有执行所需的脚本.我猜这是一件我想念的简单事.有人可以帮忙吗?
PS:忽略foobar,我有一个真正的ID实际上在使用,我不想分享.
是否要在每次渲染此组件时一次又一次地获取和执行脚本,或者只是在将此组件装入DOM时只执行一次?
也许尝试这样的事情:
componentDidMount () { const script = document.createElement("script"); script.src = "https://use.typekit.net/foobar.js"; script.async = true; document.body.appendChild(script); }
但是,如果要加载的脚本不可用作模块/包,这只是非常有用.首先,我会永远:
在npm上查找包
在我的项目中下载并安装包(npm install typekit
)
import
我需要的包裹(import Typekit from 'typekit';
)
这可能是您安装软件包的方式react
,也可能是您react-document-title
的示例,并且npm上有一个Typekit软件包.
继上面的答案,你可以这样做:
import React from 'react'; export default class Test extends React.Component { constructor(props) { super(props); } componentDidMount() { const s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.innerHTML = "document.write('This is output by document.write()!')"; this.instance.appendChild(s); } render() { return(this.instance = el)} />; } }div被绑定
this
并且脚本被注入其中.可以在codesandbox.io上找到演示
this.instance对我不起作用,但是document.body.appendChild从Alex McMillan的回答中做到了.
您可能没有将`this.instance`绑定到render方法中的ref.我添加了一个演示链接来显示它的工作情况
3> Patrice Wrex..:我最喜欢的方法是使用React Helmet - 它是一个允许以您可能习惯的方式轻松操作文档头的组件.
例如
import React from "react"; import {Helmet} from "react-helmet"; class Application extends React.Component { render () { return (); } };... https://github.com/nfl/react-helmet
这是迄今为止最好的解决方案.
不幸的是,它无法正常工作...请参阅https://codesandbox.io/s/l9qmrwxqzq
试过这个,对我不起作用。我不建议使用react-helmet,其唯一原因是它将无法删除的额外属性注入脚本。这实际上破坏了某些脚本,并且维护者多年未对其进行修复,并拒绝https://github.com/nfl/react-helmet/issues/79
@Darkowic,我通过将`async =“ true”`添加到将jQuery添加到代码的`<script>`标签中来使您的代码正常工作。
4> 小智..:Alex Mcmillan提供的答案对我帮助最大,但对于更复杂的脚本标签却不太有用.
我略微调整了他的答案,想出了一个带有各种功能的长标签解决方案,另外还设置了"src".
(对于我的用例,脚本需要生活在头部,这也反映在这里):
componentWillMount () { const script = document.createElement("script"); const scriptText = document.createTextNode("complex script with functions i.e. everything that would go inside the script tags"); script.appendChild(scriptText); document.head.appendChild(script); }
我不明白你为什么要使用React,如果你只是将内联JS转储到页面上......?
5> scabbiaza..:如果你需要
在SSR中进行阻塞(服务器端渲染),那么一种方法
componentDidMount
将无效.您可以改用
react-safe
库.React中的代码将是:import Safe from "react-safe" // in render{ `try{Typekit.load({ async: true });}catch(e){}` }
6> 小智..:我为这个特定的案例创建了一个React组件:https://github.com/coreyleelarson/react-typekit
只需将你的Typekit Kit ID作为道具传递,你就可以了.
import React from 'react'; import Typekit from 'react-typekit'; const HtmlLayout = () => (My Example React Component
); export default HtmlLayout; 推荐阅读
如何解决《WPFDatagrid-强制单行行》经验,为你挑选了1个好方法。 ... [详细] 如何解决《JSF2下载带有西里尔文名称的文件》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何使用jquery从json数组中分离值.》经验,为你挑选了0个好方法。 ... [详细] 如何解决《为什么这个JS代码无效?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《尝试开始使用doParallel和foreach但没有改进》经验,为你挑选了1个好方法。 ... [详细] 如何解决《触摸starlingsprite中空白空间的事件》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何从事件处理程序中删除自己?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《用于转换为并行集合的通用类型参数》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在gdb中,我可以调用一些类函数,但其他函数"无法解析".为什么?》经验,为你挑选了3个好方法。 ... [详细] 如何解决《双轮廓和二次误差函数》经验,为你挑选了1个好方法。 ... [详细] 如何解决《for循环查找unix中是否存在目录》经验,为你挑选了1个好方法。 ... [详细] 如何解决《sbtclearscreen命令》经验,为你挑选了2个好方法。 ... [详细] 如何解决《将数组中的每个元素乘以C中的数字》经验,为你挑选了2个好方法。 ... [详细] 如何解决《反思:如何正确调用没有参数的方法?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《为什么我从两个几乎相同的表达式获得不同的结果,以使用EntityFramework上下文从数据库获取数据》经验,为你挑选了2个好方法。 ... [详细] 如何解决《ApacheLucene与GoogleSearchAppliance》经验,为你挑选了1个好方法。 ... [详细] 如何解决《执行KornShell脚本》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在intellij中调试播放框架2.1.0scala测试》经验,为你挑选了1个好方法。 ... [详细] 吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1如何循环参数java?
- 2`pip install pyside`冻结在Linux上?
- 3Python中的方法重载:更多重载
- 4Rails:为什么我的服务器将http重定向到https
- 5在c ++中使用"this"关键字对性能有影响吗?
- 6这个AngularJS工厂的例子究竟如何?有些疑惑
- 7GOCR没有使用培训结果
- 8如何在Xcode中调整UIStackView的子视图?
- 9可靠地将类型符号(ITypeSymbol)与Roslyn进行比较
- 10什么是hadoop中的序列文件?
- 11需要有关Flask安全模块的密码散列算法的建议
- 12如何设置pep8 linter接受2个空格缩进?
- 13过滤其值小于0的pandas数据帧行
- 14在Ansible中,是否可以根据剧本定义身份验证方法?
- 15使用哈希表在球拍中排序更快
- 16如何将QString乘以它自身重复n次?
- 17在python中使用pandas将csv文件附加到一个
- 18POEdit不会在HTML标记中提取字符串
- 19在flink中测量作业执行时间
- 20如何将删除函数传递给make_shared?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有