Дублирование пути после страницы refre sh при использовании UIRouter pushStateLocationPlugin - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблема с @ uirouter / реагирует при использовании pushStateLocationPlugin. Допустим, мой текущий URL-адрес localhost:3000/manage/admin_home. При обновлении страницы sh URL-адрес меняется на localhost:3000/manage/admin_home/manage/admin_home. Он продолжает дублироваться каждый раз, когда я обновляю sh страницу.

Мой код выглядит следующим образом: router.config. js:

import _ from 'lodash'
import { hashLocationPlugin, servicesPlugin, UIRouterReact } from '@uirouter/react'

import states from './components/states'

export const router = new UIRouterReact()

router.plugin(servicesPlugin)
router.plugin(hashLocationPlugin)

// Register All States Explicitly
states.forEach((state) => router.stateRegistry.register(state))

// Default Rules
router.urlService.rules.initial({ state: 'app' })
router.urlService.rules.otherwise(() => router.stateService.go('error', null, { location: false }))

// Update store on state changes
router.transitionService.onEnter(true, async function (trans, state) {
    const shouldEnterHook = _.get(state, 'data.shouldEnter', null)
    console.log(shouldEnterHook)
    if (shouldEnterHook) {
        return await shouldEnterHook(trans, state)
    }
})

состояний. js:

import { appStore } from 'store'
import { auth } from 'api'

import App from './app'
import { Inventory } from './inventory'

const fetchSiteData = async () => {
    try {
        const response = await auth.me()
        const { isLoggedIn, userDetails, siteData } = response.payload
        if (isLoggedIn) {
            appStore.setPageSchema(siteData)
            appStore.setLoggedInUser(userDetails)
        } else {
            appStore.setLoggedOut()
        }
    } catch (e) {
        appStore.setLoggedOut()
        return e
    }
    return true
}

export default [
    {
        name: 'app',
        component: App,
        redirectTo: 'manage',
        resolve: [
            {
                token: 'initData',
                resolveFn: async () => {
                    console.log('In app resolve function')
                    appStore.showPreloader(true)
                    try {
                        await fetchSiteData()
                    } catch (e) {
                        return Promise.reject(e)
                    } finally {
                        appStore.showPreloader(false)
                    }
                    return true
                }
            }
        ]
    },
    {
        parent: 'app',
        name: 'manage',
        url: '/manage/:resource/?:action/?:id',
        data: {
            shouldEnter: (trans) => (appStore.isLoggedIn ? true : trans.router.stateService.target('login'))
        },
        params: {
            resource: { type: 'string', value: () => 'admin_home' },
            action: { type: 'string', value: null },
            id: { type: 'string', value: null }
        },
        component: Inventory,
        resolve: [
            {
                token: 'initData',
                deps: ['$transition$'],
                resolveFn: (t) => {
                    return {
                        params: t.params()
                    }
                }
            }
        ]
    }
]

Все работает нормально, если я использую hashLocationPlugin. Я что-то не так делаю или это ошибка?

...