Я начну с того, что скажу, что все работает правильно, просто я пытаюсь понять, что именно происходит и почему я наблюдаю такое поведение.
Допустим, у меня есть компонент, FooComponent
и два разных маршрута: /foo
и /bar
. Я визуализирую их следующим образом:
<Route
exact
path="/foo"
render={({ location }) => <FooComponent location={location} />}
/>
<Route
path="/bar"
render={({ location }) => <FooComponent location={location} />}
/>
При нажатии между страницами /foo
и /bar
кажется, что FooComponent
монтируется только один раз. Чтобы проверить это, вот как реализован FooComponent
:
const FooComponent = ({ location }) => {
useEffect(() => {
console.log("Mount");
return () => {
console.log("Cleanup");
};
}, []);
return <div>At {location.pathname}</div>;
};
Mount
регистрируется только один раз.
Это меня полностью озадачивает, поскольку FooComponent
отображается двумя совершенно разными родительских Route
компонентов, и я думал, что React будет выполнять согласование только при повторном рендеринге одного и того же родительского компонента с разными дочерними элементами. Более того, изменение одного значения на возврат <div><FooComponent location={location} /></div>
и оставление другого как есть приведет к отключению компонента.
Здесь - воспроизводимый пример.