2016-12-27 4 views
1

Соединения React Router представляют собой компоненты двойной рендеринга. Может ли кто-нибудь повторить мои результаты ниже:React Router Ссылки представляют собой компоненты двойной рендеринга

При первой загрузке страницы вы получите сообщение «RENDERING HOME», зарегистрированное один раз. Но с помощью ссылок всегда будет дважды записываться строка «RENDERING».

import ReactDOM from 'react-dom'; 
import React from 'react'; 
import { Router, Route, Link, IndexRoute, hashHistory, browserHistory } from 'react-router'; 


class home extends React.Component { 
    render(){ 
     console.log('RENDERING HOME'); 
     return(
      <Link to='destination'>Link to Destination</Link> 
     ) 
    } 
} 

class destination extends React.Component { 
    render(){ 
     console.log('RENDERING DESTINATION'); 
     return(
      <Link to='/'>Link to Home</Link> 
     ) 
    } 
} 

var App = React.createClass({ 
    render: function() { 
     return(
      <Router history={hashHistory}> 
       <Route path='/' component={home}/> 
       <Route path='destination' component={destination}/> 
      </Router> 
    ); 
    }, 
}); 


ReactDOM.render(<App />, document.getElementById('app')); 

EDIT: Это, как представляется, ошибка, другие отмечали его на среагировать-маршрутизатор GitHub. Его единственная ошибка с hashHistory. Переключение на browserHistory решает проблему.

+0

Вы говорите, что при изменении пути, который запускаются как функции 'console.log'? –

+0

Нет, если вы нажмете ссылку назначения, «RENDERING DESTINATION» будет регистрироваться дважды. Значение компонента назначения отображается дважды. Замечание об изменении пути не имеет этого результата. Если я просто перейду к пункту назначения вручную, он будет отображаться только один раз. Он специально использует компонент Link, который дублирует. –

+0

Я думаю, это потому, что у вас нет маршрута назначения, вложенного в корневой маршрут. Попробуйте это: поместите «IndexRoute» и маршрут назначения под корневым маршрутом. Тогда компонент 'IndexRoute'' должен быть' home'. Родительский корневой маршрут должен быть контейнером для всего вашего приложения. –

ответ

0

вам необходимо изменить маршрутизатор. добавить/в пункт назначения

<Router history={hashHistory}> 
       <Route path='/' component={home}/> 
       <Route path='/destination**' component={destination}/> 
    </Router> 

добавить маршрут назначения внутри корневого маршрута

<Router history={hashHistory}> 
     <Route path='/' component={home}> 
      <Route path='destination**' component={destination}/> 
     </Route> </Router> 
+0

Ни одно из этих предложений не работает. Добавление/ничего не меняет, вам не нужен/для того, чтобы маршрут работал. И это еще удваивает. –

+0

Ваше второе предложение просто ломает вещь. Компонент назначения больше не отображается, поскольку компонент «Главная» не имеет ссылки на {props.children}. Поскольку путь/destination является дочерним по отношению к домашнему пути, домашний компонент всегда будет отображаться, и если он не ссылается на его дочерние маршруты, вы никогда их не увидите. –

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