我具有打印功能,它首先将isPrinting
的状态设置为true,然后打开打印对话框。对话框关闭后,将isPrinting
的状态设置为false
,这时我遇到了错误(第二个setState
):
未捕获的ReferenceError:未定义setState
我使用箭头函数将函数绑定到当前上下文。
handlePrint = () => {
this.setState({ isPrinting: true }, () => { //setState is working working properly
window.print();
if (window.matchMedia) {
var mediaQueryList = window.matchMedia('print');
mediaQueryList.addListener = (mql) => {
if (!mql.matches) {
this.setState({ isPrinting: false }); //Error
}
}
}
});
};
答案 0 :(得分:1)
尝试一下。
handlePrint = () => {
let _this = this;
this.setState({ isPrinting: true }, () => {
window.print();
if (window.matchMedia) {
var mediaQueryList = window.matchMedia('print');
mediaQueryList.addListener = (mql) => {
if (!mql.matches) {
_this.setState({ isPrinting: false });
}
}
}
});
};
答案 1 :(得分:1)
我不确定您要在此实现什么,但是vals <- df$x[cumsum(c(1,vec))][-1]
df$y <- NA
df$y[cumsum(c(1, vec + 1))] <- vals
冻结该应用。除非有人单击打印屏幕,否则不会运行任何代码。我的工作就像df <- data.frame(x = c(6211, 6111, 711, 414,3211,3311, 3411,3511,6211,6111))
vec <- as.numeric(c("2","4","2"))
。您可以尝试在window.print()
之后打印一个thimestamp来尝试。因此,除了存在无法解决的上下文问题之外,整个功能是无用的。因为您可以这样做:
window.alert("...")
致谢
答案 2 :(得分:0)
第二次,而不是setState
,只需返回新状态,如:
return {
isPrinting: false,
};
答案 3 :(得分:0)
这应该有帮助
handlePrint = () => {
this.setState({ isPrinting: true }, () => { //setState is working working properly
window.print();
if (window.matchMedia) {
var mediaQueryList = window.matchMedia('print');
mediaQueryList.addListener = (mql) => {
if (!mql.matches) {
return { isPrinting: false };
}
}
}
});
};
setState
方法应返回新状态,而不是尝试执行任何操作。
答案 4 :(得分:-1)
您是如何使用'mediaQueryList.addListener'函数的?您可以控制台两个'this',看看它们是否相同。