用KeepAlive包裹的组件中,react-router-dom无法获取params
用KeepAlive包裹的组件中,可以获取到pathname,但无法获取params。 具体描述如下: Route的path: '/playlist/:id',我访问‘/playlist/12345’, react-router-dom有useLocation和useParams这两个hooks,用useLocation获取到{pathname:"/playlist/12345,...},而useParams只能获取到空对象。用withRouter的效果也是一样的,props.match.params也是空对象。 不包裹KeepAlive则一切正常。
我知道了,
<Route
path="/playlist/:id"
render={props => (
<KeepAlive>
<Playlist {...props} />
</KeepAlive>
)}
/>
在playlist组件中直接获取props.match.params.id就可以了,不要用withRouter或者useParams
问题是如何才能使 useParams 正常使用呢?老大有办法解决么?我这边发现通过render传入props,内部组件Props.match也是空的
问题是如何才能使 useParams 正常使用呢?老大有办法解决么?我这边发现通过render传入props,内部组件Props.match也是空的
用react-router-cache-route这个库,也是同一个作者写的,可以正常使用useParams
可以看看 AliveScope 和 Router 的位置关系,AliveScope 需要在 Router 内部
<Router>
<AliveScope>
<Route .../>
</AliveScope>
</Router>
的确是在router内部的
不使用 KeepAlive 是不是就没问题了?
如果有关键代码片段的话,可以呈现一下,有 demo 更好
不使用 KeepAlive 是不是就没问题了?
如果有关键代码片段的话,可以呈现一下,有 demo 更好
大佬,麻烦你拉 重现地址: https://codesandbox.io/s/keepalivebug-l5lx2 重现方法:将keepAlive注释和释放,对比前后差异,keepAlive存在的时候,组件props.match和useParams输出结果就缺失了页面的参数
感觉 keepAlive 组件内没有把 match 正确的传递给子组件
目前看,可能需要加这些东西,5.2.0 后 react-router-dom 不再暴露 RouterContext,我看看怎么解决

目前看,可能需要加这些东西,5.2.0 后 react-router-dom 不再暴露 RouterContext,我看看怎么解决
这样在未使用 react-activation/babel 的时候是有效果的 但是如果加上了这个插件,那么/:id 这类的路由在切换id后,mach内的id还是老的id,没有发生变化
问题是如何才能使 useParams 正常使用呢?老大有办法解决么?我这边发现通过render传入props,内部组件Props.match也是空的
用react-router-cache-route这个库,也是同一个作者写的,可以正常使用useParams
我用react-router-cache-route,也是出现useParams为空的情况,在路由跳转离开的时候触发当前组件的渲染,useParams获取为空报错
@xydegithub react-router-cache-route 应该是 OK 的呀,可以到那边去开个 issues,前两天我看也有人提到这个,不过后来发现又没问题了