Передача props.children из контейнерного компонента в презентационный компонент

Я делаю некоторую маршрутизацию, я хочу попробовать отобразить IndexZoomOverviewContainer into IndexZoomViewPanelContainer,

Когда я иду по правильному пути "... индекс / обзор", IndexZoomViewPanelContainer отображается, но когда я прохожу детей (маршрут для IndexZoomOverviewContainer в данном случае) из контейнера (IndexZoomViewPanelContainer) для просмотра (IndexZoomViewPanelComponent), он не отображается и выдает ошибку:

Снимок экрана ошибки: https://i.gyazo.com/990f92d3058806baa576dca5247ace9e.png

Когда я удалил this.props.children, это не показывает какую-либо ошибку.

Вот маршрутизация:

<Route className="fullHeight fullWidth" key="indexzoom" path="index/" component={indexmonitor.IndexZoomViewPanelContainer} >
     <Route className="fullHeight fullWidth" key="indexzoom1" path="overview" component={indexmonitor.IndexZoomOverviewContainer} />
     <Route className="fullHeight fullWidth" key="indexzoom2" path={routes.INDEX_ZOOM_CONSTITUENTS_RELATIVE_PATH} component={dashboard.DashboardListContainer} />
 </Route>

IndexZoomViewPanelContainer:

class IndexZoomViewPanelContainer extends React.Component {
    constructor(props) {
        super(props)
    }

    componentDidMount() {
    }

    componentWillUnmount() {
    }

    render() {
        return <IndexZoomViewPanelComponent>
                  {this.props.children}
               </IndexZoomViewPanelComponent>;
    }
}

IndexZoomViewPanelComponent:

function IndexZoomViewPanelComponent(props) {
        const tabs = getTabs();
        return (
            <div className="container">
                <viewPanel.ViewPanel title={"Index Zoom"}
                    authKey={perm.INDEX_ZOOM_VIEWPANEL_PERM}
                    path={route.APP_PATH}
                    getPermStateFunc={(state) => state.MENUPERMS}
                >
                    <TabControl tabs={tabs} selected={route.INDEX_ZOOM_OVERVIEW_RELATIVE_PATH}>
                        {props.children}
                    </TabControl>
                </viewPanel.ViewPanel>
            </div>
        );
    }

2 ответа

Вот способ достичь того, что вам нужно на маршруте:

// I'm renaming your components and removing className/key for readability

<Route path="/index" render={() => (
  <IndexZoomViewPanelContainer>
    <Route path="/index/overview" component={IndexZoomOverviewContainer} />
  </IndexZoomViewPanelContainer>
  )}
/>

Вы также можете сделать свои вложенные маршруты в IndexZoomViewPanelContainer компонент напрямую.

См. https://reacttraining.com/react-router/core/api/Route/render-func для получения дополнительной информации.

Я хочу попробовать отобразить IndexZoomOverviewContainer в IndexZoomViewPanelContainer

<Route className="fullHeight fullWidth" key="indexzoom" path="index/" 
component={indexmonitor.IndexZoomViewPanelContainer} >

IndexZoomViewPanelContainer визуализируется как часть маршрутизации и не имеет детей

Так,

return <IndexZoomViewPanelComponent>{this.props.children}</IndexZoomViewPanelComponent>

в приведенном выше сценарии, this.props.children будет неопределенным и выдаст ошибку, которой вы поделились.

Для того, чтобы работать это, должно быть,

 return <IndexZoomViewPanelComponent><IndexZoomOverviewContainer /></IndexZoomViewPanelComponent>
Другие вопросы по тегам