账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    react如何处理登录页面的路由?
    29
    0

    问题

    • 新手,我想做一个带单独登录页面的react单页应用,不知道如何处理登录页面的路由。
    • 我按照下面的代码处理了登录组件,可以实现登录进去后进入login页面,但是当我切到 localhost/#/layout/id这些主页面的路由时是个白屏,而且chrome调试工具没有报错,webpack也没提示错误。
    • 求解,是不是我的方案有问题?怎么解决localhost/#/layout/id白屏的问题?

    我的代码

    app.jsx

    import Login from 'page/login/index.jsx';
    import Layout from 'component/layout/index.jsx';
    
    class App extends React.Component{
        render(){
            return(
                <HashRouter>
                    <switch>
                        <Route exact path="/" component={Login} />
                        <Route exact path="/layout" component={Layout} />
                    </switch>
                </HashRouter>
            )
        }
    }
    
    ReactDOM.render(
        <App />,
        document.getElementById('app')
    );    

    login.jsx 页面是我的登录页面,我希望只在输入url后的第一次显示

    class Login extends React.Component{
        render(){
            return(
                <div class="loginpage">
                    <p>登录</p>
                </div>
                );
        }
    }
    export default Login;
    

    layout.jsx 页面是我的主页面

    import TopNav from "component/nav-top/index.jsx";
    import SideNav from "component/nav-side/index.jsx";
    import Home from 'page/home/index.jsx';
    import Id from 'page/id/index.jsx';
    import Data from 'page/data/index.jsx';
    import Dev from 'page/dev/index.jsx';
    
    class Layout extends React.Component{
        constructor(props){
            super(props);
        };
        render(){
            return(
                <div id="layout">
                    <TopNav />
                    <SideNav />
                    <Switch>
                        <Route exact path="/layout/home" component={Home} />
                        <Route exact path="/layout/id" component={Id} />
                        <Route exact path="/layout/dev" component={Dev} />
                        <Route exact path="/layout/data" component={Data} />
                        <Redirect from="layout" to="/layout/home"/>
                    </Switch>
                </div>    
            );
        }
    }
    export default Layout;

    webpack配置

    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const ExtractTextPlugin = require('extract-text-webpack-plugin');
    const webpack = require('webpack');
    module.exports = {
        entry: './src/app.jsx',
        output: {
            path: path.resolve(__dirname,'dist'),
            publicPath: '/dist/',
            filename: 'js/app.js'
        },
        resolve:{
            alias:{
                page: path.resolve(__dirname,'src/page'),
                component: path.resolve(__dirname,'src/component')
            }
        },
        module: {
            rules: [
            // react语法的处理
                {
                    test: /\.jsx$/,
                    exclude: /(node_modules)/,
                    use: {
                        loader: 'babel-loader',
                        options: {
                            presets: ['env','react']
                        }
                    }
                },
                // css文件的处理
                {
                    test: /\.css$/,
                    use: ExtractTextPlugin.extract({
                        fallback: "style-loader",
                        use: "css-loader"
                    })
                },
                //图片的配置
                {
                    test:/\.(png|jpg|gif)$/,
                    use: [
                        {
                            loader: 'url-loader',
                            options: {
                                limit:8192,
                                name:'resouce/[name].[ext]'
                            }
                        }
                    ]
                }
                
            ]
        },
        plugins: [
            // 处理html文件
            new HtmlWebpackPlugin({
                template: './src/index.html'
            }),
            // 独立css文件
            new ExtractTextPlugin("css/[name].css"),
        ],
        devServer:{
            port: 8086,
            historyApiFallback:true
        }
    };
     
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 彩虹糖没有糖 普通会员 1楼

      在React中,你可以使用React Router库来处理登录页面的路由。React Router是一个用于管理React应用中路由的库。

      以下是一个简单的例子:

      首先,你需要在你的项目中安装React Router。你可以使用npm或yarn来安装:

      ```bash npm install react-router-dom

      yarn add react-router-dom ```

      然后,你可以在你的应用的src目录中创建一个文件夹,名为router。这个文件夹将包含你的路由配置文件和应用中的所有路由组件。

      router文件夹中,你可以创建一个名为index.js的文件,然后在其中添加以下代码:

      ```jsx import React from 'react'; import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';

      function App() { return ( ); }

      export default App; ```

      在这个例子中,我们创建了一个默认的路由,该路由将导航到应用的主页。我们还创建了一个登录路由,该路由将导航到登录页面。

      你可以根据需要修改路由配置文件,例如,你可以添加或删除路由,改变路由的URL,更改路由的匹配条件等。

      最后,你可以使用App组件来渲染你的应用。例如,你可以在App组件中添加一个按钮,点击该按钮时,导航到登录页面:

      ```jsx function App() { return ( ); }

      export default App; ```

      在这个例子中,我们添加了一个按钮,当用户点击该按钮时,导航到登录页面。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部