我有一个比较简单的问题,就是尝试将内联脚本添加到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 (
<DocumentTitle title="People">
<article className={[prefix('people'), prefix('people', 'index')].join(' ')}>
<h1 className="tk-brandon-grotesque">People</h1>
<script src="https://use.typekit.net/foobar.js"></script>
<script dangerouslySetInnerHTML={{__html: 'try{Typekit.load({ async: true });}catch(e){}'}}></script>
</article>
</DocumentTitle>
);
}
};
我还尝试过:
<script src="https://use.typekit.net/foobar.js"></script>
<script>try{Typekit.load({ async: true });}catch(e){}</script>
这两种方法似乎都无法执行所需的脚本。我想我错过的是一件简单的事。有人能帮忙吗?
PS:忽略foobar,我有一个真实的id实际上在使用,我不想分享。
除了上面的答案之外,您还可以执行以下操作:
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 <div ref={el => (this.instance = el)} />;
}
}
div被绑定到this
,脚本被注入其中。
可以在CodeSandBox.io上找到演示
您想要一次又一次地获取并执行脚本吗,每次呈现此组件时,还是只在将此组件挂载到DOM中时执行一次?
也许可以试试这样的方法:
componentDidMount () {
const script = document.createElement("script");
script.src = "https://use.typekit.net/foobar.js";
script.async = true;
document.body.appendChild(script);
}
但是,只有当您要加载的脚本不能作为模块/包使用时,这才是真正有帮助的。首先,我总是:
npm install typekit
)导入
需要它的包(从“Typekit”导入Typekit;
)这可能是您安装示例中的react
和react-document-title
包的方式,并且在NPM上有一个Typekit包可用。
现在我们有了钩子,更好的方法可能是使用useEffect
,如下所示:
useEffect(() => {
const script = document.createElement('script');
script.src = "https://use.typekit.net/foobar.js";
script.async = true;
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
}
}, []);
这使它成为自定义钩子(例如:hooks/usescript.js
):
import { useEffect } from 'react';
const useScript = url => {
useEffect(() => {
const script = document.createElement('script');
script.src = url;
script.async = true;
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
}
}, [url]);
};
export default useScript;
其使用方式如下:
import useScript from 'hooks/useScript';
const MyComponent = props => {
useScript('https://use.typekit.net/foobar.js');
// rest of your component
}
问题内容: 我有一个相对简单的问题,试图将内联脚本添加到React组件。到目前为止,我有: 我也尝试过: 两种方法似乎都无法执行所需的脚本。我猜这是我所缺少的简单事情。有人可以帮忙吗? PS:忽略foobar,我有一个真正的ID正在使用中,而我不想共享。 问题答案: 编辑:事情变化很快,这已经过时了-查看更新 您是否想在每次渲染此组件时一次或一次将该组件安装到DOM中时一次又一次地获取并执行脚本?
问题内容: 我有一个相对简单的问题,试图将内联脚本添加到React组件中。到目前为止,我有: 我也尝试过: 两种方法似乎都无法执行所需的脚本。我想这很简单,我很想念。有人可以帮忙吗? PS:忽略foobar,我确实有一个真正的ID正在使用,而我不想共享。 问题答案: 编辑:事情变化很快,这已经过时了-查看更新 您是否想在每次渲染此组件时一次或一次将该组件安装到DOM中时一次又一次地获取并执行脚本?
嗨,我试图创建一个由JComboBox和JTextField组成的接口。我已经整理好了向JComboBox添加标签的代码,但是我在向文本字段添加标签时遇到了麻烦。如有任何帮助,不胜感激。
我目前在按钮按钮上用于“显示当天报价”的脚本缺少一个功能:链接支持= 仅仅添加一个普通的“href”不起作用,它只显示为文本。 还有别的办法吗?
问题内容: 我已经编辑了package.json以自定义“开始”脚本,因此它将–debug标志添加到节点: 有没有一种方法可以添加新脚本,例如调试脚本,该脚本可以执行我自定义的“开始”现在正在执行的操作? 我希望能够执行: 问题答案: 在您的package.json中定义脚本 然后您可以使用npm的运行脚本 或更短的版本
我正在开发一个页面,该页面使用JavaScipt通过ajaxpost将数据发送到PHP脚本。问题是,如果输入的语言不是基于拉丁语的,我最终会在MySQL表中存储胡言乱语。拉丁字母很好用。 页面本身能够呈现UTF-8字符,如果这些字符在页面加载时提供的数据中,那么我要处理的就是这篇文章。 اختبار 和保存。请参阅浏览器的开发工具中的网络POST请求。 这篇文章是通过下面的JS函数完成的 这是我的