У меня проблема с @ 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
. Я что-то не так делаю или это ошибка?