- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码是一个简单的重新实现react-coin-hive ,基本上我想了解这里发生了什么。
它加载 Coinhive 的 javascript ,但是我收到错误
Line 8: 'CoinHive' is not defined no-undef
这是 react 代码:
import React, {Component} from 'react';
import loadScript from 'load-script';
class App extends Component {
buildMiner = async () => {
this.miner = await new Promise(resolve => {
loadScript('https://coinhive.com/lib/coinhive.min.js', () => {
return resolve(CoinHive.Anonymous('WshUK1rGzM29IvlWo1qFhk37IgLIh3t3'));
})
})
};
async componentWillMount() {
this.buildMiner();
this.miner.start();
}
render() {
return (
<div>
Start mining!
</div>
);
}
}
export default App;
如果您正常加载 Coinhive,您将有权访问该对象,并会调用:
<script src="https://coinhive.com/lib/coinhive.min.js"></script>
<script>
var miner = new CoinHive.Anonymous('YOUR_SITE_KEY');
miner.start();
</script>
我的另一个小问题是为什么使用语法:
buildMiner = async () => {}
而不是说:
async buildMiner() {}
最佳答案
我建议您在 componentDidMount
中加载 Coinhive 库,因为这是最佳实践: Reference ,并引用本网站的内容:
If you need to load data from a remote endpoint, this is a good place to instantiate the network request.
React 就是 props
和state
,为什么不从初始化 state
开始呢?在构造函数中,像这样?
constructor(props) {
super(props);
this.state = {
loadScriptCalled: false, // state variable to let us know if loadScript has run
miner: null // state variable to let us know if the miner is available
};
}
此外,由于您的 buildMiner
函数返回 Promise
,您无需调用async
然后await
“ promise ”你的职能。
buildMiner = () => {
return new Promise((resolve, reject) => {
loadScript('https://coinhive.com/lib/coinhive.min.js',
(error, script) => {
if (error) {
reject(error);
} else {
console.log("Loaded")
return resolve(CoinHive.Anonymous('WshUK1rGzM29IvlWo1qFhk37IgLIh3t3'));
}
})
})
};
然后,this.buildMiner
是 Promise
,你只需要这样对待它,然后处理你的 state
then()
中的组件或catch()
block ,像这样:
componentDidMount() {
this.buildMiner()
.then((miner) => {
console.log("miner :", miner);
this.setState({
loadScriptCalled: true,
miner: miner
});
this.state.miner.start();
})
.catch((error) => {
this.setState({
loadScriptCalled: true
})
console.log("Failed to load CoinHive :", error);
});
}
完整代码可在此处获取:https://codesandbox.io/s/o4lo1my0ky
希望这有帮助!
关于javascript - 在 React 中加载外部脚本(使用 load-script),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729398/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!