【发布时间】:2019-11-15 22:53:01
【问题描述】:
我不知道描述这个问题的最佳方式,但我会尽力解释。
在我的核心 React App 组件中,我正在根据用户是否登录进行条件渲染。
如果登录 --- 我显示主页,如果没有,他们会看到登录屏幕。
在我的登录页面上,我试图在底部放置一个链接,引导用户注册一个新帐户。我的问题是,当我单击此“新用户”页面时,它会呈现我的登录表单和创建用户表单,它们都是不同的组件(见下文)。
我怀疑这是我的 react 路由器设置的问题,但我不确定问题是什么。
这是我的 App 组件中的代码。
<Container>
<Router>
<Notification />
{props.loggedUser ? (
<div>
<Navbar />
<Route exact path="/" render={() => <Blogs />} />
<Route exact path="/blogs" render={() => <Blogs />} />
<Route path="/login" render={() => <Login />} />
<Route
exact
path="/blogs/:id"
render={({ match }) => (
<Blog
blog={blogById(match.params.id)}
user={props.loggedUser}
/>
)}
/>
<Route exact path="/users" render={() => <Users />} />
<Route
exact
path="/users/:id"
render={({ match }) => <User user={userById(match.params.id)} />}
/>
</div>
) : (
<>
<Login />
</>
)}
</Router>
<div>
<br />
<em>Blog app, John 2019</em>
</div>
</Container>
这是我的登录组件。我已经尝试在上面的条件语句的两侧以及下面的登录表单中包含新用户页面的路由,就像我现在所做的那样。所有这些都导致相同的问题。
<h1>Login To Blog Application</h1>
<Form onSubmit={handleLogin}>
<Form.Field>
<label>username</label>
<input {...username.omitreset} name="username" />
</Form.Field>
<Form.Field>
<label>password</label>
<input {...password.omitreset} type="password" />
</Form.Field>
<Button type="submit">login</Button>
<div>
<br />
<Link to="/newuser">or signup to become a new user</Link>
<Route path="/newuser" render={() => <NewUser />} />
</div>
</Form>
</>
和 NewUser 组件
import React from "react";
import { connect } from "react-redux";
import { createUser } from "../reducers/userReducer";
import { setNotification } from "../reducers/notificationReducer";
import { Form, Button } from "semantic-ui-react";
const NewUser = props => {
const addUser = event => {
event.preventDefault();
const userObject = {
username: event.target.username.value,
name: event.target.name.value,
password: event.target.password.value
};
event.target.username.value = "";
event.target.name.value = "";
event.target.password.value = "";
props.createUser(userObject);
};
return (
<>
<h1>Create a New Blog Account</h1>
<Form onSubmit={addUser}>
<Form.Field>
<label>username</label>
<input {...props.username} name="username" />
</Form.Field>
<Form.Field>
<label>name</label>
<input {...props.name} type="password" />
</Form.Field>
<Form.Field>
<label>password</label>
<input {...props.password} type="password" />
</Form.Field>
<Button type="submit">login</Button>
</Form>
</>
);
};
const mapDispatchToProps = {
createUser,
setNotification
};
export default connect(null, mapDispatchToProps)(NewUser);
【问题讨论】:
-
没有足够的细节来回答这个问题。您还没有告诉我们哪条路线是“新用户”页面,因此通过阅读您的代码进行调试是不可能的。另外,如果用户已经登录,为什么还要在路由中包含登录名?这没有任何意义。
-
我已经包含了 NewUser 组件,它是为登录表单下方的链接呈现的组件。希望这会有所帮助。我明白你所说的登录路由是什么意思——我仍然对 React Router 感到困惑,这是问题的一部分。
-
当您点击
newuser路由的链接时,URL 栏会显示什么内容? -
@JohnRogerson 仍然没有足够的详细信息,因为您根本没有在第一个代码 sn-p 中将
NewUser组件作为路由安装的任何地方显示。其余的代码在哪里? \ -
@MikeAbeln 它显示了正确的路线 /newuser
标签: javascript reactjs react-router