Как передать state в this.props.children. React

261
19 декабря 2017, 20:29

Привет. Не знаю как при загрузке с помощью 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; 
Answer 1

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'));
READ ALSO
Две разные строки попадают под одну регулярку

Две разные строки попадают под одну регулярку

Есть строка две строки, которые мне нужно распознавать регулярками, как разные строки /tickets/moscow/tokyo/ и /tickets/moscow/Я написал сначала регулярку...

292
Как отформатировать число в JS и вывести в pug?

Как отформатировать число в JS и вывести в pug?

Всем доброго времени сутокПередаю в вид объект

289
Логин в react.js

Логин в react.js

Например у меня есть метод:

244
Событие на input

Событие на input

В общем задача необходимо создать форму состоящую из двух строк

261