javascript - 跨屏幕传递数据
问题描述
我是 React 的初学者,我正在尝试使用道具在屏幕之间传递数据,但不起作用,这是我的代码:
Login.jsx:我有一个如何提交表单的方法,并从 API 获取数据并验证它是否为真,然后导航到用户页面:
handleSubmit = event => {
var user = this.state.user
var password = this.state.password
this.state.users.forEach(users => {
if ((users.name === user) && (users.password === password)) {
alert("Login Successful!")
this.setState(() => ({
toUser: true,
isLogin: true,
userId: users.id,
}));
} else {
alert("Verify the information you have entered!")
}
});
}
render() {
if (this.state.toUser === true) {
return <Redirect to='/user' />
}
return (
<div className="Login">
<h3>USER AREA</h3>
<form onSubmit={this.handleSubmit}>
<FormGroup controlId="user" bsSize="large">
<ControlLabel>Username</ControlLabel>
<FormControl
autoFocus
type="user"
value={this.state.user}
onChange={this.handleChange}
/>
</FormGroup>
<FormGroup controlId="password" bsSize="large">
<ControlLabel>Password</ControlLabel>
<FormControl
value={this.state.password}
onChange={this.handleChange}
type="password" />
</FormGroup>
<Button
block
bsStyle="primary"
bsSize="large"
disabled={!this.validateForm()}
type="submit"
>
LOGIN
</Button>
</form>
</div>
);
}
User.jsx:我想从登录接收数据以在用户页面中使用,我尝试过这样的事情:
constructor(props) {
super(props);
this.state = {
user: "",
password: "",
'users': [],
toUser: false,
userId: this.props.userId,
};
}
render() {
return (
<div className="Login">
<h3>USER AREA {this.props.userId}</h3>
</div>
);
}
这就是我想要的结果:
解决方案
我为使用历史道具传递数据所做的事情,
this.props.history.push({
pathname:"/user",
state:{
userId:"1"
}
});
你可以访问像this.props.location.state.userId
handleSubmit = event => {
var user = this.state.user
var password = this.state.password
this.state.users.forEach(users => {
if ((users.name === user) && (users.password === password)) {
alert("Login Successful!")
this.props.history.push({
pathname:"/user",
state:{
userId:users.id
}
});
} else {
alert("Verify the information you have entered!")
}
});
}
render() {
return (
<div className="Login">
<h3>USER AREA</h3>
<form onSubmit={this.handleSubmit}>
<FormGroup controlId="user" bsSize="large">
<ControlLabel>Username</ControlLabel>
<FormControl
autoFocus
type="user"
value={this.state.user}
onChange={this.handleChange}
/>
</FormGroup>
<FormGroup controlId="password" bsSize="large">
<ControlLabel>Password</ControlLabel>
<FormControl
value={this.state.password}
onChange={this.handleChange}
type="password" />
</FormGroup>
<Button
block
bsStyle="primary"
bsSize="large"
disabled={!this.validateForm()}
type="submit"
>
LOGIN
</Button>
</form>
</div>
);
}
推荐阅读
- amazon-web-services - EKS 上的 AWS NLB 粘性会话
- asp.net-core-3.1 - ASP.NET Core 3.1 在服务器上保存 .txt 文件并将其下载到客户端
- mysql - RANK() 在 mysql 中使用,当我使用子查询获取特定等级的行时,抛出“错误代码:1242。子查询返回超过 1 行”
- python - 如何在 Python 中有效地从 npy 文件加载字典
- python - 无法在 tkinter 窗口中打开图像,任务是使用 os 模块制作图像库,但由于窗口上没有显示任何内容,因此发生了一些错误
- jpa - CDI 事件:称为 BEFORE_COMPLETION 的事务观察器导致 INSERT 语句被执行两次
- javascript - 比较json api中的实时数据
- java - 无法使用 App Engine 标准环境为 Java 11 启用 GCloud 调试器
- python - RuntimeError: tensorflow/lite/kernels/conv.cc:349 input->dims->data[3] != filter->dims->data[3] (64 != 1)节点号 13 (CONV_2D) 准备失败
- sql-server - 选择列对进行数据采样