2017-01-03 8 views
1

Проблема:Реагировать маршрутизатор повторно оказывать тот же компонент

Есть асинхронной маршрут, получить из параметров movie из него и возврата Movie Container (компонент). Проблема в том, что я перехожу от одного MovieContainer к другому MovieContainer (только тот же маршрут, но с параметрами diff) мой маршрутизатор размонтирует и повторно обрабатывает MovieContainer компонент. Но он должен просто передать новые реквизиты и не трогать мой жизненный цикл компонентов. Как его решить? Что я делаю неправильно?

Код:

маршрутизатор

<Route path="/" component={AppLayout}> 
    <IndexRoute components={{ children: Home }} /> 
    <Route path=":movie/about" getComponents={(nextState, callback) => { 
    window.scrollTo(0, 0); 
    const movie = findMovie(nextState.params.movie); 
    return callback(null, { children: (router) => <Movie movie={movie} router={router} /> }); 
    }}/> 
    .... 
</Route> 

Компонент WillMount в компоненте Movie

componentWillMount() { 
    console.log('MOUNT MovieContainer'); 
    } 

UPDATE: ОК, Готово некоторый эксперимент.

Заменить

return callback(null, { children: (router) => <Movie movie={movie} router={router} /> });

С

return callback(null, Movie);

ANDD Movie component повторно не renderd. Просто обновлено. Здорово! Но как передать реквизит сейчас?

+0

Это правильно и желательное поведение. Новые маршруты должны повторно монтировать все компоненты. –

+0

@ AndyRay, но это не новый маршрут, просто '/ movie1/about' to'/movie2/about' Этот шаблон маршрута '/: someparams' создан только для передачи новых реквизитов на один и тот же компонент. Итак, почему он должен переделать? –

+0

Это абсолютно новый маршрут. –

ответ

0

Отлично! Наконец я нашел решение.

<Route path=":movie/about" getComponents={(nextState, callback) => { 
    window.scrollTo(0, 0); 
    callback(null, Movie); 
}} 
/> 

И в компоненте я могу получить доступ реквизита через this.props.params.movie чем найти фильм в конструкторе/componentWillMount const movie = findMovie(nextState.params.movie);

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