Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用React处理登录的基本方法_Javascript_Reactjs - Fatal编程技术网

Javascript 使用React处理登录的基本方法

Javascript 使用React处理登录的基本方法,javascript,reactjs,Javascript,Reactjs,我正在使用CreateReact应用程序开发客户端应用程序。应用程序用一个基本表单呈现一个登录组件,我想在成功登录时加载另一个组件(它将是主应用程序) 验证和登录逻辑目前不是问题,因为首先,我试图找到一种简单的方法卸载登录组件并在提交事件上加载另一个组件 class Login extends Component { handleLogin(){ // trigger to load Main.js } render() { retur

我正在使用CreateReact应用程序开发客户端应用程序。应用程序用一个基本表单呈现一个登录组件,我想在成功登录时加载另一个组件(它将是主应用程序)

验证和登录逻辑目前不是问题,因为首先,我试图找到一种简单的方法卸载登录组件并在提交事件上加载另一个组件

class Login extends Component {

    handleLogin(){
        // trigger to load Main.js
    }

    render() {
        return (
            // form elements here

            <div className="submit">
                <input className="button-signin" value="Sign In" type="submit"
                    onClick={this.handleLogin}/>
                </div>
            );
    }
}
类登录扩展组件{
handleLogin(){
//用于加载Main.js的触发器
}
render(){
返回(
//这里的表单元素
);
}
}
在提交事件中切换到另一个组件(在本例中我称之为Main.js)的最简单方法是什么?

您尝试过使用吗?这使得定义路由和为每个路由分配组件变得非常容易。然后,您还可以为访问每个路由建立条件。这似乎符合你的要求

<Router history={withExampleBasename(browserHistory, __dirname)}>
<Route path="/" component={App}>
  <Route path="login" component={Login} />
  <Route path="logout" component={Logout} />
  <Route path="about" component={About} />
  <Route path="dashboard" component={Dashboard} onEnter={requireAuth} />
</Route>

每次尝试访问路由
仪表板
(将显示组件
仪表板
)时,都会检查方法
requireAuth
。如果您使用的是基于令牌的身份验证,则可能会将令牌存储在本地存储中,并检查它是否存在于
requireAuth

您的方法
handleLogin
将调用后端,让用户登录(如果登录是这样处理的,则将令牌存储在localStorage中),然后重定向到仪表板路由。

您尝试过使用吗?这使得定义路由和为每个路由分配组件变得非常容易。然后,您还可以为访问每个路由建立条件。这似乎符合你的要求

<Router history={withExampleBasename(browserHistory, __dirname)}>
<Route path="/" component={App}>
  <Route path="login" component={Login} />
  <Route path="logout" component={Logout} />
  <Route path="about" component={About} />
  <Route path="dashboard" component={Dashboard} onEnter={requireAuth} />
</Route>

每次尝试访问路由
仪表板
(将显示组件
仪表板
)时,都会检查方法
requireAuth
。如果您使用的是基于令牌的身份验证,则可能会将令牌存储在本地存储中,并检查它是否存在于
requireAuth


您的方法
handleLogin
将调用后端,登录用户(如果登录是这样处理的,则将令牌存储在localStorage中),然后重定向到仪表板路由。

要路由还是重定向?因为当你说重定向时,听起来好像你想更改window.location对不起,我不是想用那种方式使用重定向,我已经将问题改为“加载另一个组件”而不是重定向。如果我可以卸下登录组件并挂载主应用程序组件,我会很高兴。但是如果路由是一种方式,那么是的,这就是我要寻找的。你想路由还是重定向?因为当你说重定向时,听起来好像你想更改window.location对不起,我不是想用那种方式使用重定向,我已经将问题改为“加载另一个组件”而不是重定向。如果我可以卸下登录组件并挂载主应用程序组件,我会很高兴。但是如果路由是一种方式,那么是的,这就是我要寻找的。我知道它超出了范围,但我看到了一些BrowserHistory和一些HashHistory的示例。这两种方法似乎都有效,在客户端项目中,你会喜欢其中一种方法吗?你可以找到不同之处。他们之间有些不同。基本上,HashHistory更容易开始,但是你应该在生产中使用BrowserHistory,因为URL更干净。我知道这超出了范围,但我看到了一些BrowserHistory示例和一些HashHistory示例。这两种方法似乎都有效,在客户端项目中,你会喜欢其中一种方法吗?你可以找到不同之处。他们之间有些不同。基本上,HashHistory更容易开始,但您应该在生产中使用BrowserHistory,因为URL更干净。