We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我们今天讲的这种react路由懒加载是基于import 函数路由懒加载, 众所周知 ,import 执行会返回一个Promise作为异步加载的手段。我们可以利用这点来实现react异步加载路由
const routerObserveQueue = [] /* 存放路由卫视钩子 */ /* 懒加载路由卫士钩子 */ export const RouterHooks = { /* 路由组件加载之前 */ beforeRouterComponentLoad: function(callback) { routerObserveQueue.push({ type: 'before', callback }) }, /* 路由组件加载之后 */ afterRouterComponentDidLoaded(callback) { routerObserveQueue.push({ type: 'after', callback }) } } /* 路由懒加载HOC */ export default function AsyncRouter(loadRouter) { return class Content extends React.Component { constructor(props) { super(props) /* 触发每个路由加载之前钩子函数 */ this.dispatchRouterQueue('before') } state = {Component: null} dispatchRouterQueue(type) { const {history} = this.props routerObserveQueue.forEach(item => { if (item.type === type) item.callback(history) }) } componentDidMount() { if (this.state.Component) return loadRouter() .then(module => module.default) .then(Component => this.setState({Component}, () => { /* 触发每个路由加载之后钩子函数 */ this.dispatchRouterQueue('after') })) } render() { const {Component} = this.state return Component ? <Component { ...this.props } /> : null } } }
asyncRouter实际就是一个高级组件,将()=>import()作为加载函数传进来,然后当外部Route加载当前组件的时候,在componentDidMount生命周期函数,加载真实的组件,并渲染组件,我们还可以写针对路由懒加载状态定制属于自己的路由监听器beforeRouterComponentLoad和afterRouterComponentDidLoaded,类似vue中 watch $route 功能。接下来我们看看如何使用。
import AsyncRouter ,{ RouterHooks } from './asyncRouter.js' const { beforeRouterComponentLoad} = RouterHooks const Index = AsyncRouter(()=>import('../src/page/home/index')) const List = AsyncRouter(()=>import('../src/page/list')) const Detail = AsyncRouter(()=>import('../src/page/detail')) const index = () => { useEffect(()=>{ /* 增加监听函数 */ beforeRouterComponentLoad((history)=>{ console.log('当前激活的路由是',history.location.pathname) }) },[]) return <div > <div > <Router > <Meuns/> <Switch> <Route path={'/index'} component={Index} ></Route> <Route path={'/list'} component={List} ></Route> <Route path={'/detail'} component={ Detail } ></Route> <Redirect from='/*' to='/index' /> </Switch> </Router> </div> </div> }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
asyncRouter懒加载路由,并实现路由监听
我们今天讲的这种react路由懒加载是基于import 函数路由懒加载, 众所周知 ,import 执行会返回一个Promise作为异步加载的手段。我们可以利用这点来实现react异步加载路由
asyncRouter实际就是一个高级组件,将()=>import()作为加载函数传进来,然后当外部Route加载当前组件的时候,在componentDidMount生命周期函数,加载真实的组件,并渲染组件,我们还可以写针对路由懒加载状态定制属于自己的路由监听器beforeRouterComponentLoad和afterRouterComponentDidLoaded,类似vue中 watch $route 功能。接下来我们看看如何使用。
The text was updated successfully, but these errors were encountered: