React Router-渲染组件的问题。白屏

蒂亚戈·帕尔马斯(Tiago Palmas)

我正在使用带有react-router-dom的仪表板工作。我有一个结构,即“身份验证”页面和“仪表板”页面。当我从登录名导航到mainPages并尝试在DashboardContainer中选择一个导航链接时,向我显示白屏。

const MainContainer  = ()=>{
    return(
        <BrowserRouter>
            <div style={{flexDirection: 'row', display: 'flex'}}>
                <Route path="/login" exact component={LoginPage}/>
                <Route path="/main" exact component={DashBoardCotainer}/>

            </div>


        </BrowserRouter>
    )
}

export default MainContainer;

单击登录按钮,然后将我重定向到仪表板

const LoginPage  = (props)=>{
    return(
        <div style={{width: '100%', height: '100vh', alignItems: 'center', justifyContent: 'center', display: 'flex', flexDirection: 'column'}}>
            <h1>Vendedor Solar</h1>
            <button onClick={()=>{props.history.push( '/main' )}}>Logar</button>


        </div>
    )
}

export default LoginPage;

单击仪表盘侧栏的导航链接时,会发生问题

const DashBoardCotainer = () => {
    return (

        <div style={{flexDirection: 'row', display: 'flex'}}>
            <Navigation/>
            <div style={{padding: 20}}>
                <Switch>
                    <Route path="/home" exact component={Home}/>
                    <Route path="/order" exact component={Orders}/>
                    <Route path="/contact" exact component={Contact}/>
                    <Route component={Error}/>
                </Switch>
            </div>

        </div>



    )
}

export default DashBoardCotainer;


class Navigation extends Component{

    constructor(props){
        super(props)
        this.state={
            navVisilbe:false
        }
    }

    render(){
        const {navVisilbe} = this.state

        return(
            <div style={{display:'flex', flexDirection: 'column', padding: 20, height: '100vh',
                backgroundColor: mainOrange}}>


                <NavLink to="/home"  exact

                        >Home</NavLink>
                <NavLink to="/order"  exact
                      >Pedidos</NavLink>
                <NavLink to="/contact"  exact

                         >Contatos</NavLink>


            </div>
        )
    }

}
export default Navigation
切坦·普拉卡什(Chetan Prakash)

您应该为路线创建一个唯一的文件,您可以在其中创建“公共”和“私人”布局,如​​下所示

class MainContainer extends React.Component {
        render() {
        return(
            <BrowserRouter>
            <Switch> 
                <PublicLayout path="/login" exact component={LoginPage} />

                <PrivateLayout path="/home" exact component={Home} />
                <PrivateLayout path="/order" exact component={Order} />
                <PrivateLayout path="/contact" exact component={Contact} />
                // remove the 'exact' from route and you can make the nested routing working perfectly.. below example
                <PrivateLayout path="/contact/create" component={AddContact} />
            </Switch>
            </BrowserRouter>
        )
    }
}

export default MainContainer;

公共布局

export const PublicLayout = ({ component: Component, ...rest }) => {  
    return <Route {...rest} render={(props) => (
        <React.Fragment>
          {<Component {...props} />} 
        </React.Fragment>  
    )} />
};

私人布局

export const PrivateLayout = ({ component: Component, ...rest }) => {  

    const token = localStorage.getItem("token");   

    return <Route {...rest} render={(props) => (
        <React.Fragment>
          <div className="sideBar"><Navigation /></div>
            <div className="contentBar">
                {!token ? <Redirect to={{ pathname: '/login', state: { from: props.location }}} /> : <Component {...props} /> }  
            </div>
        </React.Fragment>  
    )} />
};

您的导航侧边栏

export class Navigation extends Component{

    constructor(props){
        super(props)
        this.state={
            navVisilbe:false
        }
    }

    render(){
        const {navVisilbe} = this.state

        return(
            <div style={{display:'flex', flexDirection: 'column', padding: 20, height: '100vh', backgroundColor: mainOrange}}>

                <NavLink to="/home"  exact  >Home</NavLink>
                <NavLink to="/order"  exact >Pedidos</NavLink>
                <NavLink to="/contact"  exact  >Contatos</NavLink>
                <NavLink to="/contact/create"  exact  >Edit Contatos</NavLink>

            </div>
        )
    }
}

希望这会有所帮助:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章