У меня есть два основных компонента, которые имеют общий макет. Первый представляет собой список записей. Когда пользователь нажимает «Изменить», он попадает на страницу сведений.
Проблема заключается в том, что на странице сведений отображается первая запись со страницы «список», а не та, которую щелкнул пользователь.
Я провел некоторое тестирование, и похоже, что проблема заключается в том, что страница сведений загружается и монтируется до запуска ComponentWIllUnmount(), поэтому подписка с этой предыдущей страницы все еще активна в течение нескольких миллисекунд. Если я перехожу непосредственно на страницу сведений или перезагружаю ее, она работает правильно, поскольку не получает никаких данных с предыдущей страницы.
Вот мой код:
Список.jsx
export default class List extends TrackerReact( React.Component ) {
constructor( props ) {
super( props );
var subscription = this.getSubscription();
this.state = {
ready: subscription.ready(),
subscription: subscription,
}
}
componentWillUnmount() {
this.state.subscription.stop();
}
render() {
return(
//stuff...
)
}
}
Деталь.jsx
export default class SkinDetail extends TrackerReact( React.Component ) {
constructor( props ) {
super( props );
const subscription = Meteor.subscribe( 'skins.one', this.props.skin );
var record = Records.findOne();
if( record ) {
this.state = {
subscription: subscription,
// Stuff...
}
}
}
getRecord() {
return Records.findOne();
}
render() {
var record = this.getRecord();
return(
// Do stuff with record...
)
}
}
Я использую FlowRouter SSR для ссылок и маршрутов.
_id
. Остановка подписки занимает немного времени (сервер должен сообщить клиенту, что нужно удалить и т. д.). - person MasterAM   schedule 04.11.2016