【问题标题】:React Router - hide header and footer when rendered in iFrameReact Router - 在 iF​​rame 中呈现时隐藏页眉和页脚
【发布时间】:2017-11-20 13:26:06
【问题描述】:

我有一个使用 create-react-app 构建的 react 应用。这是我的 index.js

export class MyRoutes extends React.Component{
    render(){
        return(
            <div>
                <Route exact path='/' component={ Home }/>
                <Route path='/team' component={ Team }/>
                <Route path='/career' component={ Career }/>
                <Route path='/faq' component={ Faq }/>
                <Route path='/contact' component={ Contact }/>
                <Switch>
                    <Route exact path='/jobs' component={ JobHome } />
                    <Route path='/jobs/alle' component={ JobList } />
                    <Route path='/jobs/:url' component={ JobDescription } />
                </Switch>
            </div>
        )
    }
}

ReactDOM.render(
    <Router>
        <div>
            <Responsive minWidth={768}>
                <Header/>
                <MyRoutes/>
            </Responsive>

            <Responsive maxWidth={767}>
                <MobileHeader
                    routes={<MyRoutes/>}
                />
            </Responsive>
            <Footer />
        </div>
    </Router>,
    document.getElementById('root')
);

我需要在外部网站的 iframe 中呈现 url /jobs/:url。 如何在此视图中排除 &lt;Header/&gt;&lt;Footer/&gt;

【问题讨论】:

    标签: javascript reactjs iframe react-router


    【解决方案1】:

    这个解决方案终于对我有用了:

    const MyRoutes = () => (
        <div>
            <Route exact path='/' component={ Home }/>
            <Route path='/team' component={ Team }/>
            <Route path='/career' component={ Career }/>
            <Route path='/faq' component={ Faq }/>
            <Route path='/contact' component={ Contact }/>
            <Switch>
                <Route exact path='/jobs' component={ JobHome } />
                <Route path='/jobs/alle' component={ JobList } />
                <Route path='/jobs/:url' component={ JobDescription } />
            </Switch>
            <Route path='/xing_jobs/:url' component={ JobDescription }/>
        </div>
    )
    
    export let App = (props) => {
        let location = props.location;
        let isXingUrl = location.pathname && location.pathname.match(/^\/xing_jobs/);
        console.log('isXingUrl', isXingUrl);
    
        return (
            <div>
                <Responsive minWidth={768}>
                    {!isXingUrl && <Header/>}
                    <MyRoutes/>
                </Responsive>
    
                <Responsive maxWidth={767}>
                    <MobileHeader
                        showHeader={!isXingUrl}
                        routes={<MyRoutes/>}
                    />
                </Responsive>
                {!isXingUrl && <Footer/>}
            </div>
        )
    }
    App = withRouter(App);
    
    ReactDOM.render(
        <Router>
            <App />
        </Router>,
        document.getElementById('root')
    );
    

    【讨论】:

      【解决方案2】:

      看起来正确的方法是将移动标头放入路由器中:

      <Route path="/jobs/..." component={ComponentwithoutHeader}>
      <Route path="/" component={Header}>
      ...Routes wit header
      </>
      

      在您的标题组件中使用它来呈现嵌套组件。 {this.props.children}

      这样你就可以对 Header 和 Footer 使用相同的组件,并在这两者之间渲染 body。

      告诉它是否有效。 ;)

      【讨论】:

        【解决方案3】:
        export class MyRoutes extends React.Component{
            render(){
                let {path} = this.props.matc
                let routes = (
                    <div>
                      <Switch>
                        <Route path='/team' component={Team}/>
                        <Route path='/career' component={Career}/>
                        <Route path='/faq' component={Faq}/>
                        <Route path='/contact' component={Contact}/>
                        <Route exact path='/jobs' component={JobHome}/>
                        <Route path='/jobs/alle' component={JobList}/>
                        <Route path='/jobs/:url' component={JobDescription}/>
                        <Route exact path='/' component={ Home }/>
                      </Switch>
                    </div>
                )
                return (
                  <div>
                    <Responsive minWidth={768}>
                        {path != '/jobs/:url' && <Header/>}
                        {routes}
                    </Responsive>
        
                    <Responsive maxWidth={767}>
                        <MobileHeader
                            routes={routes}
                        />
                    </Responsive>
                    {path != '/jobs/:url' && <Footer/>}
                </div>
                )
            }
        }
        
        
        
        
        ReactDOM.render(
            <Router>
                <Route exact path='/' component={ MyRoutes }/>
            </Router>,
            document.getElementById('root')
        );
        

        【讨论】:

        • 只有/route 有效。其余页面无法呈现其内容
        • 问题是exact path='/'。没有exact 它可以工作。但是路径始终是/,因此三级运算符不起作用。
        • 你现在可以试试吗.. 我添加了 并将 / 路由移到了末尾
        • 不,也不是。现在内容不会被渲染。仅呈现页眉和页脚。
        • 问题是props.match 没有传递给&lt;Router/&gt;。请参阅我的答案以获得有效的修复。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-22
        • 1970-01-01
        • 1970-01-01
        • 2022-07-17
        • 2020-11-18
        • 1970-01-01
        相关资源
        最近更新 更多