我想将 reactsetState
与 chrome API一起使用,但我遇到了一个问题......
componentDidMount() {
chrome.runtime.onMessage.addListener(function(request, sender) {
if (request.action == "getSource") {
this.setState({sourceCode: request.source});
}
});
}
我尝试了以下操作,但 chrome API 无法识别setState
为函数,因此我尝试先将其另存request.source
为变量...
componentDidMount() {
var source = "";
chrome.runtime.onMessage.addListener(function(request, sender) {
if (request.action == "getSource") {
source = request.source;
}
});
this.setState({sourceCode: source});
}
但是当我尝试以下操作时,source
仍然是一个空字符串。我无法弄清楚为什么因为source
被设置为request.source
. 我怎样才能解决这个问题?
编辑
我正在调用脚本...
chrome.tabs.executeScript(null, {
file: 'src/js/scripts/getPageSource.js'
}, function() {
...
在脚本中我有以下内容......
chrome.runtime.sendMessage({
action: "getSource",
source: DOMtoString(document)
});
whereDOMtoString
函数只返回一个字符串。这是我componentDidMount
通过在 if 语句中打印到控制台来验证的。
我注意到它addListener
是异步的。有什么办法可以将结果保存在状态中吗?