reactjs - 为什么 React onLeave={} 会为每个页面切换执行,而不是仅在分配的页面中执行?
问题描述
我有这条路线,我想在用户离开时执行一些东西。
所以我找到了 onLeave 钩子
<Switch>
<Route exact path="/layout" onLeave={ console.log("LEFT LAYOUT") } render={(props) => <GridLayoutApps retracted={this.state.sideBarRetracted} {...props}/>} />
</Switch>
每当我在 /layout 时,它应该控制台记录“左侧布局”,并决定加载另一条路线。关键是,这似乎没有发生,因为每次切换任何路线时都会加载 console.log。
我的 app.js 文件中有路线,我
export default withRouter(App);
我已经像这样将它封装在索引中
ReactDOM.render(<BrowserRouter><Provider store={store}><App /></Provider></BrowserRouter>, document.getElementById('root'));
解决方案
onLeave 需要是一个函数。目前它只是一个普通的道具
<Switch>
<Route exact path="/layout" onLeave={() => {console.log("LEFT LAYOUT")} } render={(props) => <GridLayoutApps retracted={this.state.sideBarRetracted} {...props}/>} />
</Switch>
但是请注意 onLeave 在 react-router v4 以后不再可用,您需要使用componentWillUnmount
oruseEffect
钩子来触发相同的行为
推荐阅读
- javascript - 反应。TypeError:当我尝试通过 axios 发布请求向 api 发送数据时,将循环结构转换为 JSON
- html - 如何从 html5 脚本向 django rest 框架进行 API 调用?
- javascript - 根据活动轮播项目显示不同的数据
- c - 联合声明和定义
- c# - Environment.Exit(0) 和 Environment.Exit(Environment.ExitCode) 有什么区别?
- python - OSM Overpy 几何
- excel - 通过循环清除内容
- mongodb - 配置批处理配置器以在 Spring Batch 中包含带有 Spring Data MongoDb 的事务
- php - 在 php 中创建的文件和 kotlin 应用程序之间的数据加密
- google-app-engine - 从经过身份验证的请求中转发 OAuth 2 凭据(特别是在 GCP 中)