Я внедряю рендеринг на стороне сервера в большое приложение React (только на стороне клиента). В исходном коде я использую пользовательские компоненты маршрута, такие как, и т. Д., И они получают реквизит от подключенного компонента контейнера. Все маршруты внутри.
Теперь я создал файл rout.js, в котором есть массив маршрутов, и я использую renderRoutes (маршруты) как на стороне сервера, так и на стороне клиента. Просто начал включать маршруты в этот массив из "старого" кода. Простые маршруты, такие как, легко реализовать, но я не могу найти никакого ответа или решения, как я могу реализовать способ визуализации определенных пользовательских маршрутов, упомянутых выше.
Я пытался использовать свой собственный цикл для рендеринга массива маршрутов на сервере и клиенте с некоторыми конкретными условиями, но это не было решением.
Вот старый код, например, на клиенте:
<Route exact path={'/'} component={Landing} />
<Route exact path={'/login'} component={Login} />
<PrivateRoute exact path={'/profile'} component={this.switchComponent(Profile)} {...this.props} />
<PrivateRoute path={'/adjust-subscription/:type/:term'} component={AdjustRecruiterSubscription} {...this.props} />
вот здесь PrivateRoute:
import React from 'react';
import PropTypes from 'prop-types';
import { loadState } from '../../utils/localStorage';
import { Route, Redirect } from 'react-router-dom';
import { RECRUITER_USER_TYPE, EMPLOYER_USER_TYPE } from '../../utils/constants';
class PrivateRoute extends React.Component {
render() {
const { component, ...rest } = this.props;
const Component = component;
const localStorageUser = loadState('user');
return (
<Route
{...rest}
render={props => {
if (this.props.isLoggedIn && localStorageUser.phone) {
return <Component {...props} />;
}
if (
this.props.isLoggedIn &&
!localStorageUser.phone &&
localStorageUser.type === RECRUITER_USER_TYPE
) {
return (
<Redirect
to={{
pathname: '/sign-up/recruiter',
state: { from: props.location }
}}
/>
);
}
if (
this.props.isLoggedIn &&
!localStorageUser.phone &&
localStorageUser.type === EMPLOYER_USER_TYPE
) {
return (
<Redirect
to={{
pathname: '/auth-user/company',
state: { from: props.location }
}}
/>
);
}
return (
<Redirect
to={{
pathname: '/login',
state: { from: props.location }
}}
/>
);
}}
/>
);
}
}
PrivateRoute.propTypes = {
component: PropTypes.func,
isLoggedIn: PropTypes.bool,
location: PropTypes.object
};
export default PrivateRoute;
и вот новый массив маршрутов:
export const routes = [
{
path: '/',
exact: true,
component: Landing,
loadData: getUser
},
{
path: '/login',
exact: true,
component: Login
},
{
path: '/*',
component: NotFound
}
];
export default [
{
component: Layout,
path: '/',
routes
}
];
Отображение маршрутов:
<Provider store={store}>
<Router location={req.url} context={context}>
{renderRoutes(routes)}
</Router>
</Provider>
Так что мой вопрос заключается в том, чтобы захотеть преобразовать последние 2 маршрутов () в старом коде в массив новых маршрутов. Я много гуглил и пробовал несколько вещей, но у меня ничего нет. Спасибо за любую помощь.