Reactjs 未定义设置状态
我有一个打印功能,它首先将Reactjs 未定义设置状态,reactjs,Reactjs,我有一个打印功能,它首先将isPrinting的状态设置为true,然后打开一个spring对话框。关闭对话框后,它将isPrinting的状态设置为false,此时我得到了错误(第二个setState): 未捕获引用错误:未定义setState 我用arrow函数将函数绑定到当前上下文 handlePrint = () => { this.setState({ isPrinting: true }, () => { //setState is working worki
isPrinting
的状态设置为true,然后打开一个spring对话框。关闭对话框后,它将isPrinting
的状态设置为false
,此时我得到了错误(第二个setState
):
未捕获引用错误:未定义setState
我用arrow函数将函数绑定到当前上下文
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
}
}
}
});
};
您是如何使用函数“mediaQueryList.addListener”的?您可以控制台这两个“this”,看看它们是否相同。试试这个
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 });
}
}
}
});
};
第二次,只需返回新状态,而不是
setState
,如下所示:
return {
isPrinting: false,
};
这应该会有所帮助
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
方法应该返回一个新的状态,而不是尝试执行任何操作。我不确定您在这里试图实现什么,但是窗口.print()
会冻结应用程序。除非有人点击打印屏幕,否则不会运行任何代码。我的工作方式就像window.alert(“…”)
。您可以在win.print
之后立即打印一个thimestamp来尝试。所以,除此之外,这个上下文还有一个无法实现的问题,整个函数是无用的。因为你可以做到:
handlePrint = () => {
this.setState({ isPrinting: true }, () => {
window.print() //freezes until someone clicks it away.
this.setState({ isPrinting: false }) //Error
})
}
关于您是否可以提供整个组件?您是否在类内定义了
handlePrint
函数?@VikashSingh是,导出默认类SearchResultsPanel扩展组件{
此答案解释了为什么在mediaQueryList.addListener的回调中未定义setState。请尝试prabu samvel的答案以获得apt解决方案。谢谢,我不再收到错误,但状态不会更新为false
。