【发布时间】:2021-08-25 21:52:37
【问题描述】:
在我使用 TypeScript 和 React 编写的许多页面上,我不断收到 警告:无法对未安装的组件执行 React 状态更新消息。我看到许多论坛提供了一个解决方案,其中包括设置一个名为 _isMounted 的状态变量,并在运行任何初始化函数之前将其设置为 true。我已经这样做了并且不断收到错误,但经过一些实验后发现了一个可行的解决方案,虽然我不知道为什么它有效。
这是我的第一个方法。使用此代码仍会显示警告消息
const [_isMounted, set_isMounted] = useState<boolean>(false);
useEffect((): () => void => {
window.addEventListener('resize', updateWindowDimensions);
updateWindowDimensions();
set_isMounted(true);
return (): void => {
window.removeEventListener('resize', updateWindowDimensions);
}
}, []);
useEffect((): void => {
if (_isMounted === true) {
function1();
function2();
function3();
function4();
function5();
}
}, [_isMounted]);
通过将_isMounted初始化为未定义,将其设置为false,然后将其设置为true来更改它似乎已经解决了问题
const [_isMounted, set_isMounted] = useState<boolean>();
useEffect((): () => void => {
window.addEventListener('resize', updateWindowDimensions);
updateWindowDimensions();
set_isMounted(false);
return (): void => {
window.removeEventListener('resize', updateWindowDimensions);
}
}, []);
useEffect((): void => {
if (_isMounted === false) {
set_isMounted(true);
}
}, [_isMounted]);
useEffect((): void => {
if (_isMounted === true) {
function1();
function2();
function3();
function4();
function5();
}
}, [_isMounted]);
为什么第一种方法不能解决问题而第二种方法成功了?
【问题讨论】:
标签: reactjs typescript react-tsx