我想使用的setState
与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)
});
其中DOMtoString
函数只返回一个字符串。它是由我的组件didmount
捕获的,我通过打印到if语句内的控制台来验证它。
我注意到addListener
是异步的。有什么方法可以将结果保存在状态中吗?
您需要绑定this
,使其在事件监听器中保持不变
chrome.runtime.onMessage.addListener(function(request, sender) {
if (request.action == "getSource") {
this.setState({sourceCode: request.source});
}
}.bind(this));
第二次尝试不起作用,因为回调是异步的。当回调返回时,您需要调用setState
。在第二次尝试中,您注册了侦听器,但随后立即调用setState。
编辑:或者,您可以切换到使用箭头函数。这将在词汇上绑定This
,因此它将保持不变。
chrome.runtime.onMessage.addListener((request, sender) => {
if (request.action == "getSource") {
this.setState({sourceCode: request.source});
}
});
我在Ubuntu 14.04中安装了phpbrew以使用PHP5.4。它工作得很好,但当我尝试使用composer时除外,composer会忽略phpbrew并安装与PHP5.5相关的依赖项。 有没有办法强制composer与phpbrew config兼容?我试图在我的作曲家中添加:php:“5.4”。json,但是它说这个要求在我的php版本中是不可能的。
我是Micronaut框架的新手,我正在尝试使用entitymanager创建我的存储库。我这样创建了我的存储库 我使用这个类实现接口并注入entitymanager 问题是我一直有这个错误: PS:我已经启用了注释处理
我正在尝试将composer与我的WampServer一起使用。 我所有文件的路径都是,但当我运行composer时,它会将供应商文件和其他东西安装到其他地方。 我甚至不知道我的项目在哪里,我也不能改变我的项目在哪里的路径。我已经尝试了所有的方法,但它似乎仍然没有在我的项目文件夹中安装供应商文件。
API level 28和Google建议使用registerNetworkCallback(NetworkRequest,PendingIntent)不推荐CONNECTIVITY\u操作。 我尝试使用ConnectionManager注册了registerNetworkCallback。NetworkCallback和它的工作,但我想使用PendingContent。 让我困惑的是公共空寄存器
问题内容: 当我尝试将Webpack与简单的Express服务器一起使用时,总是会收到大量错误消息: express.js 我得到所有这些错误: 这是我的配置文件: 我该怎么办,我还需要在服务器端使用webpack。 我像这样运行express.js文件: 问题答案: 我最终要做的是,我使用了两种不同的配置,一种用于使用webpack将服务器内容打包在一起,另一种用于将所有浏览器内容打包在一起,并
我有两个多对多关系的实体。 在类角色中: java.lang.StackOverflowError:空 我该如何解决这个问题?我在Stackoverflow上看到了类似的问题,但我没有找到真正有效的解决方案。 Upd:抛出异常的位置:
我真的不明白我应该从< code>trackBy返回什么。根据我在网上看到的一些例子,我应该返回对象的一些属性值。对不对?为什么我应该获取< code>index作为参数? 例如在以下情况下: 组件.组件. ts 组件.模板.html 尽管名称未更改,此模板中显示的对象仍会更新。为什么?
我看到了很多关于Kryo是否可以用来替换RMI所使用的默认JVM序列化的问题,但没有关于如何实际设置它的问题。我听说Kryo是JVM序列化的“插入式”替换,不确定这是否意味着您可以从运行时类路径中交换一些JAR(就像SLF4J绑定等的情况一样),或者其他东西。 所以我要问:如何使用Kryo而不是Java附带的默认JVM序列化来获得RMI?提前道谢!