Привет. Не знаю как при загрузке с помощью react-router какогото layaut-а передать state в this.props.children.
Вот компонент Children:
import React, { Component } from 'react';
export default class Children extends Component{
render() {
return React.cloneElement(this.props.children)
}
}
вот часть компонента App где он загружается:
render() {
return (
<div>
<Header
{...this.state}
popup={this.handlePopup}
changeLogin={this.handleUser}
submitLogin={this.login}
logout={this.logOut}/>
<Children children={this.props.children} appState={this.state}/>
<Footer />
<Popup
{...this.state}
changePopup={this.handlePopup}
selectChange={this.selectChange}
changeInfoPopup={this.changeInfoPopup}
changeRadio={this.changeRadio}/>
</div>
);
}
вот роутинг:
import React from 'react';
import {IndexRoute, Route} from 'react-router';
import App from './layouts/app';
import Body from './layouts/body';
import TwoCols from './layouts/twoCols';
import PersonalArea from './containers/user/PersonalArea'
const routes = (
<Route path='/' component={App}>
<Route component={Body}>
<Route component={TwoCols}>
<Route path="scz_:user" component={PersonalArea} /> {/*сюда надо перенести state*/}
</Route>
</Route>
</Route>
)
export default routes;
https://codesandbox.io/s/03zrxm02yl, но лучшу воспользоваться походом 1 или 2 из моего комментария выше
import * as React from 'react';
import { render } from 'react-dom';
import { BrowserRouter, Route } from 'react-router-dom';
const Header = () => null;
const Footer = () => null;
const Popup = () => null;
const Body = () => null;
const TwoCols = () => null;
const PersonalArea = ({ test }) => test;
type AppProps = {
children: Function;
};
class App extends React.Component<AppProps, {}> {
state = { test: 1 }
render() {
return (
<div>
<Header />
{
// @ts-ignore
this.props.children(this.state)
}
<Footer />
<Popup />
</div>
);
}
}
const Router = props => (
<div>
<BrowserRouter>
<Route path='/' render={() => (
<App>
{ state => (
<Route
path="/"
render={() => <PersonalArea {...state} />}
/>
)}
</App>
)} />
</BrowserRouter>
</div>
);
render(<Router />, document.getElementById('root'));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть строка две строки, которые мне нужно распознавать регулярками, как разные строки /tickets/moscow/tokyo/ и /tickets/moscow/Я написал сначала регулярку...