Harici (node_modules) desen kütüphanemden bileşenler oluşturuyorum. Benim ana App, benim geçiyorum Link
gelen örneği react-router-dom
şöyle Harici kütüphanelerin bileşenine:
import { Link } from 'react-router-dom';
import { Heading } from 'my-external-library';
const articleWithLinkProps = {
url: `/article/${article.slug}`,
routerLink: Link,
};
<Heading withLinkProps={articleWithLinkProps} />
Kütüphanemde şu şekilde işler Link
:
const RouterLink = withLinkProps.routerLink;
<RouterLink
to={withLinkProps.url}
>
{props.children}
</RouterLink>
RouterLink
Tıklandığında URL'ye ayrılsa bile doğru bir şekilde oluşturulması görünüyor ve.
Benim sorunum , RouterLink
Uygulamamın react-router-dom
örneğinden kopmuş gibi görünüyor . Ben tıkladığınızda Heading
, bu "sert" gezinirken gönderme-geri sayfasını ziyade sorunsuz olarak orada yönlendirme daha Link
normalde.
Sorunsuz bir şekilde gezinmesine izin vermek için bu noktada ne yapacağımı bilmiyorum. Herhangi bir yardım veya tavsiye takdir edilecektir, şimdiden teşekkür ederim.
Düzenle: Yönlendiricimin nasıl kurulduğunu gösteren.
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 ) kullanıyorsunuz, react-redux
ve react-router
kitaplıkların eski sürümlerini kullanmak için özel bir kısıtlamanız yoksa, sorununuzu çözebileceği için yeni sürümlere geçmeyi düşünmelisiniz ). Ya yükseltme yapmak veya tam sürümlerini sağlamalıdır react
, react-router-redux
, react-redux
ve react-router-dom
biz bir yama çözüm bulmak için bir şans böylece projesi şu anda kullanıyor.
<Link>
bileşeninizi harici lib'inize argüman veya sahne olarak aktarmıyorsunuz? bu da daha fazla esneklik ve navigasyonun temiz bir şekilde ele alınmasını sağlayacaktır.