Saya merender komponen dari pustaka pola eksternal (node_modules) saya. Di App utama saya, saya mengirimkan Link
instance react-router-dom
saya ke komponen pustaka eksternal seperti:
import { Link } from 'react-router-dom';
import { Heading } from 'my-external-library';
const articleWithLinkProps = {
url: `/article/${article.slug}`,
routerLink: Link,
};
<Heading withLinkProps={articleWithLinkProps} />
Di perpustakaan saya, ini menerjemahkannya Link
seperti ini:
const RouterLink = withLinkProps.routerLink;
<RouterLink
to={withLinkProps.url}
>
{props.children}
</RouterLink>
The RouterLink
tampaknya membuat benar, dan bahkan menavigasi ke URL saat diklik.
Masalah saya adalah RouterLink
tampaknya telah terlepas dari react-router-dom
instance App saya . Ketika saya mengklik Heading
, itu "sulit" menavigasi, memposting-kembali halaman daripada routing yang mulus seperti Link
biasa.
Saya tidak yakin apa yang harus dicoba pada saat ini untuk memungkinkannya bernavigasi dengan mulus. Bantuan atau saran apa pun akan dihargai, terima kasih sebelumnya.
Sunting: Menampilkan bagaimana Router saya sudah diatur.
import React from 'react';
import { hydrate, unmountComponentAtNode } from 'react-dom';
import { AppContainer } from 'react-hot-loader';
import { Provider } from 'react-redux';
import { createBrowserHistory } from 'history';
import { ConnectedRouter } from 'react-router-redux';
import RedBox from 'redbox-react';
import { Route } from 'react-router-dom';
import { Frontload } from 'react-frontload';
import App from './containers/App';
import configureStore from './redux/store';
import withTracker from './withTracker';
// Get initial state from server-side rendering
const initialState = window.__INITIAL_STATE__;
const history = createBrowserHistory();
const store = configureStore(history, initialState);
const mountNode = document.getElementById('react-view');
const noServerRender = window.__noServerRender__;
if (process.env.NODE_ENV !== 'production') {
console.log(`[react-frontload] server rendering configured ${noServerRender ? 'off' : 'on'}`);
}
const renderApp = () =>
hydrate(
<AppContainer errorReporter={({ error }) => <RedBox error={error} />}>
<Provider store={store}>
<Frontload noServerRender={window.__noServerRender__}>
<ConnectedRouter onUpdate={() => window.scrollTo(0, 0)} history={history}>
<Route
component={withTracker(() => (
<App noServerRender={noServerRender} />
))}
/>
</ConnectedRouter>
</Frontload>
</Provider>
</AppContainer>,
mountNode,
);
// Enable hot reload by react-hot-loader
if (module.hot) {
const reRenderApp = () => {
try {
renderApp();
} catch (error) {
hydrate(<RedBox error={error} />, mountNode);
}
};
module.hot.accept('./containers/App', () => {
setImmediate(() => {
// Preventing the hot reloading error from react-router
unmountComponentAtNode(mountNode);
reRenderApp();
});
});
}
renderApp();
react-router-redux
( github.com/reactjs/react-router-redux ), kecuali jika Anda memiliki kendala khusus untuk menegakkan penggunaan versi react-redux
dan react-router
pustaka yang sudah ketinggalan zaman , Anda harus mempertimbangkan pindah ke versi yang lebih baru, karena dapat memperbaiki masalah Anda ). Entah Anda melakukan upgrade, atau Anda harus menyediakan versi yang tepat dari react
, react-router-redux
, react-redux
dan react-router-dom
proyek Anda saat ini menggunakan sehingga kita memiliki kesempatan untuk menemukan solusi patch.
<Link>
komponen Anda tidak diteruskan ke lib eksternal Anda sebagai argumen atau alat peraga? yang akan memungkinkan lebih banyak fleksibilitas dan cara penanganan navigasi yang bersih.