2016-11-25 2 views
0

Я использую FlowRouter для маршрутизации в моем приложении Meteor + React. Я определил некоторые маршруты, как это:Страница перезагружается при использовании href для изменения маршрута в FlowRouter

FlowRouter.route('/about', { 
    action:() => { 
     mount(MasterLayout, { 
      content: <AboutPage />, 
     }); 
    }, 
}); 


FlowRouter.route('/terms', { 
    action:() => { 
     mount(MasterLayout, { 
      content: <TermsPage />, 
     }); 
    }, 
}); 

Теперь, когда я нажимаю на ссылку, как <a href="/about">About</>, он перегружает всю страницу, а не только изменения содержания.

Кроме того, если я использую FlowRouter.go('/about'), он отлично работает и не перезагружает страницу, только меняя содержимое.

Пожалуйста, расскажите мне, что здесь происходит.

ответ

1

Там может быть более чем одна причина, чтобы это произошло, но это то, что я имею в виду:

Это потому, что ваш <a> тег, возможно, внутри элемента (родителя или прародителя или гранд-гранд родителей. ..), имеющий обработчик события click, и этот обработчик вызывает .stopPropagation(). Это приводит к тому, что событие прекращает пузыриться вверх до обработчик события click click, добавленный FlowRouter, который отвечает за изменение маршрута для вас. Поэтому обычное поведение при нажатии тега <a> выполняется браузером, который должен изменить маршрут и перезагрузить страницу.

Для того, чтобы исправить это, вы можете попытаться удалить это .stopPropagation(). Если вы не можете по каким-либо причинам, вы можете просто позвонить e.preventDefault() и FlowRouter.go.

Если вы заинтересованы в том, как она работает, вот еще немного информации, чтобы копаться в:

+0

Вы используете React справа? то вы могли бы написать компонент для обертывания нормального тега '', этот компонент будет захватывать событие click на теге '' и выполнять задание навигации. – Khang

+0

Нашел! [twbs: bootstrap] (https://atmospherejs.com/twbs/bootstrap) пакет вызывал '.stopPropagation()'. Снятие этого делало трюк. Удалит его навсегда, поскольку я даже не использую bootstrap. Большое вам спасибо @Khang – suheb

Смежные вопросы