Skip to content

Instantly share code, notes, and snippets.

@whs
Last active March 27, 2018 04:33
Show Gist options
  • Select an option

  • Save whs/a112efe418b7cbcf091769bf7bee8224 to your computer and use it in GitHub Desktop.

Select an option

Save whs/a112efe418b7cbcf091769bf7bee8224 to your computer and use it in GitHub Desktop.
const App = ({route}) => {
let routeMetadata = routesMap[route.name];
let Component = routeMetadata && routeMetadata.component;
return <Component {...route.data} />
};
export default routeNode('')(App);
// in routes
const routes = [
{
name: 'home',
path: '/',
component: Loadable({ loader: () => import(/* webpackChunkName: 'home' */ '../pages/home'), loading: Loading }),
fetch: (state, { api }) => api.getHome(),
}
]
@whs
Copy link
Copy Markdown
Author

whs commented Mar 27, 2018

If nested route supported is required

export default function(nodeName, wrapRouteNode = true) {
    let splittedNodeName;

    if (nodeName === '') {
        splittedNodeName = [];
    } else {
        splittedNodeName = nodeName.split('.');
    }

    let component = ({ router, previousRoute, route, ...props }) => {
        if (!route) {
            return null;
        }

        let routeName = route.name;
        // read route at the current level
        let levelNodeName = routeName
            .split('.')
            .slice(0, splittedNodeName.length + 1)
            .join('.');

        let routeMetadata = routesMap[levelNodeName];
        let Component = routeMetadata && routeMetadata.component;
        if (!Component) {
            Component = errorPage(routeName);
        }

        return (
            <Provider {...route.stores}>
                <ErrorBoundary key={routeName}>
                    <Component {...props} />
                </ErrorBoundary>
            </Provider>
        );
    };

    if (!wrapRouteNode) {
        return component;
    }

    return routeNode(nodeName)(component);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment