javascript - 在 React 和 setState 中有条件地渲染组件/元素时出现问题
问题描述
我有一个反应登录/注册表单,当您登陆页面时,您位于注册部分,我需要在单击登录时显示登录部分,并显示产品,就像您从其中任何一个单击开始时一样注册或登录组件,注册部分消失。注册和登录实际上应该是相同的,只是不同的输入并显示在同一个空间中。
我的问题是我的注册和入门部分显示并正常运行,但似乎无法弄清楚如何正确设置用户单击登录按钮并让它切换以显示该组件而不是注册时的状态。
我相信我的部分问题在于此声明:
render() {
const { requestedPostsThatWeGotFromGecko } = this.state;
const { loginStatus } = this.state;
return (
<div className="gecko">
{requestedPostsThatWeGotFromGecko ? (
<Cards />
) : loginStatus ? (
<Login signup={() => this.clickMe()} />
) : (
<SignUp login={() => this.clickMe()} />
)
}
</div>
);
}
Gecko 是我的主要应用程序结构,其中大部分都包含在其中,注册、登录和卡片是我的其他组件。
注册组件
import React from 'react';
import Login from '../LogIn';
//import CoolTabs from 'react-cool-tabs';
export default class SignUp extends React.Component {
render() {
const onClick = () => {
this.props.login();
console.log('rich');
}
return (
<div className='sign-up'>
<table className='sign-up-form'>
<tbody>
<div class="gecko-signup__tabs"><button id="gecko-signup" data-selected="yes">Sign Up</button>
<button id="gecko-login" data-selected=""onClick={this.setState.loginClose}>Log In</button></div>
...
<td colSpan="2"><input id="getStarted" type="submit" value="Get Started" onClick={onClick}/></td>
</tr>
</tbody>
</table>
</div>
);
}
}
登录组件
import React from 'react';
import SignUp from '../SignUp';
export default class Login extends React.Component {
render() {
const onClick = () => {
this.props.signup();
console.log('rich');
}
return (
<div className='login'>
<div className="login" ref={el => (this.div = el)}></div>
<table className='sign-up-form'>
<tbody>
<div class="gecko-signup__tabs">
<input id="gecko-signup" value="Sign Up" onClick={SignUp} />
<input id="gecko-login" value="Log In" onClick="" />
</div>
<tr>
<td>
<p id="signUpFree">Welcome Back</p>
</td>
</tr>
<div id="inputs-section">
<div class="field-wrap">
<label>Email Address<span class="req">*</span></label>
<input type="email"required autocomplete="off"/>
</div>
<div class="field-wrap">
<label>Password<span class="req">*</span></label>
<input type="password"required autocomplete="off"/>
</div>
<tr>
<td colSpan="2"><input id="getStarted" type="submit" value="Log Me In" onClick={onClick}/></td>
</tr>
</div>
</tbody>
</table>
</div>
);
}
}
有没有一种简单的方法可以根据默认值在这三个之间交替,或者按下什么按钮?我查看了 react-router-dom,但发现自己已经将很多功能分开了。
解决方案
- 你可以
state
在你的 React 组件中添加 auth 类型。 - 根据用户点击的内容,更新 React 状态。
- 知道组件对应的状态。
this.state = {
authType: "signup"
}
render() {
if (authType === "signup") return <Signup />
if (authType === "login") return <Login />
}
或更好,
您可以使用不同的路由进行登录和注册,使用react-router
. 并以不同的方式展示它们。
推荐阅读
- mongodb - 创建集合时如何创建唯一索引?还是在它创建之前?
- java - 我们可以将所有捕获从一个 try-catch-catch... 链转移到另一个函数以防止代码重复吗?
- php - 让我的用户 ID 将其传递给我的员工
- c++ - 读取包含二维矩阵和相关数据的文本文件
- c# - MongoDB 驱动程序构建器
不要在相同的日期工作 - python - 根据列在DataFrame中插入值
- angular - 我们应该如何定义具有子状态但没有自己的属性的状态的 StateModel?
- powershell - 所有端口的powershell测试连接
- flutter - Flutter:在条子中滚动时隐藏标签栏图标
- mysql - mysql优化或简化SQL语句