-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
[WIP] try keep alive #2264
[WIP] try keep alive #2264
Conversation
不用 |
目前没做支持 liveRoute 的 Switch,我可以趁周末加一下,就和正常的 rr 用法一样了。 现在也有另外一种方法来 hack 掉这个问题: function App() {
return (
<div className="App">
<Switch>
<Route exact path="/" component={Home} />
<Route path="/item/:id" component={Detail} />
<Route path="/about" component={About} />
<Route path="/items" /> // 占位
<Route path="*" render={NotFound} />
</Switch>
<LiveRoute
path="/items"
component={List}
livePath="/item/:id"
name="items"
onHide={routeState => {
console.log("[on hide]");
console.log(routeState);
}}
onReappear={routeState => {
console.log("[on reappear]");
console.log(routeState);
}}
/>
<Bar />
</div>
);
} 就是将 LiveRoute 放在 Switch 的外面,然后在 Switch 里面放一个匹配的「占位符」,这样的好处是 Switch 不用改,但是增加了用户侧的成本。感觉最好还是改 Switch。 |
这个功能好,希望可以做支持~~~ |
update:
|
@fi3ework try it!👍 |
react-router-cache-route 原理与 react-live-route 基本一致,拓展了原本的 Switch 为 CacheSwitch ,可兼容 Switch 内写法 使用 CacheRoute 替换 Route 使用 CacheSwitch 替换 Switch import React from 'react'
import { HashRouter as Router, Route } from 'react-router-dom'
import CacheRoute, { CacheSwitch } from 'react-router-cache-route'
import List from './views/List'
import Item from './views/Item'
const App = () => (
<Router>
<CacheSwitch>
<CacheRoute exact path="/list" component={List} />
<Route exact path="/item/:id" component={Item} />
<Route render={() => <div>404 Not Found</div>} />
</CacheSwitch>
</Router>
)
export default App |
这个功能在现在的版本中如何使用 |
我在dva-cli搭建的框架里使用了你这个缓存路由,那套框架里毕竟可以自己导入react-router和react-router-cache-route去选择使用哪个,但是umi该怎么做,不管是约定还是配置的路由,生成真正路由文件的过程好像不是我们可以控制的 |
这是一个演示,有些问题需要讨论。
方案来自facebook/react#12039 (comment)
实现使用的是react-live-route
先看效果
再看问题
这个功能没办法通过plugin实现,因为路由部分文件的编辑,没有暴露接口。
由于Switch只会显示一个。所以我这里去掉了Switch,会导致所有的页面下面都会加载404页面,所以给404页面加了一个默认路径
/umi404
,基本上就是临时的去掉了404功能了。