【发布时间】:2020-03-26 04:34:01
【问题描述】:
我正在尝试在 onClick 方法调用的函数上使用“useHistory”(来自 react-router-dom)推送方法。尽管我在控制台中收到错误消息,但重定向工作正常:
警告:无法对未安装的组件执行 React 状态更新。 这是一个空操作,但它表明您的应用程序中存在内存泄漏。 要修复,取消所有订阅和异步任务 componentWillUnmount 方法。
我的路由在 My App.js 中处理如下:
function App() {
return (
<Container style={{ display: 'flex', flexDirection: 'column' }}>
<Router>
<Row>
<Col>
<div className="tabs">
<Switch>
<Route path='/' exact component={Home} />
<Route path='/staff' component={InsertingStaff} />
<Route path='/students' component={InsertingStudents} />
<Route path='/groups' component={ManageGroups} />
</Switch>
</div>
</Col>
</Row>
</Router>
</Container>
);
}
以及onClick事件后推送到路由器的组件:
function GroupsTree() {
let history = useHistory();
function handleClick(group_item) {
localStorage.setItem('selected_group', JSON.stringify(group_item))
history.push("/groups");
}
const styles = {
lines: {
color: '#0064FF',
height: '40px'
},
node: {
backgroundColor: '#0064FF',
border: '1px solid #1890ff',
},
text: {
color: '#FFFFFF',
}
};
const StyledTree = withStyles(styles)(Tree);
return (
<TransformWrapper doubleClick={{ disabled: true }} options={{ limitToBounds: false, minScale: 0.6 }} defaultScale={1}>
<TransformComponent>
<StyledTree data={data} direction={true} onClick={item => {
handleClick(item);
}}></StyledTree>
</TransformComponent>
</TransformWrapper>
)
}
对导致错误/警告的原因有什么想法吗?
【问题讨论】:
-
您可能在路由转换前后进行了异步操作。顺便说一句,
Tree来自哪里? -
TransformComponent有没有做动画,这也是第三方吗? -
好吧,我的猜测是它没有清理卸载或类似的东西。我会检查this issue,也许你只需要获取最新版本的库。为了确保它的
react-zoom-pan-pinch“故障”,我会尝试在没有它的情况下运行应用程序,看看是否收到相同的警告。 -
NP,至于你得到的警告,我写了an article。希望有帮助
-
顺便说一句,我删除了该组件,它不再抛出该错误,但我真的需要该组件的能力
标签: reactjs react-router