JSFiddle - React, Tailwind, and code Playground
by pleinx
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://npmcdn.com/react@latest/dist/react-with-addons.js"></script>
<script src="https://npmcdn.com/react-dom@latest/dist/react-dom.js"></script>
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script>
<div id="login_panel"></div>
SCSS
.component-login {
width: 300px;
padding: 10px;
border: 1px solid #ccc;
margin: 10px;
input {
width: 95%;
margin-bottom: 10px;
padding: 5px;
border-radius: 5px;
border: 1px solid #ccc;
}
h3 {
margin: 0 0 10px;
}
.component-error {
display: inline-block;
margin: 10px 0;
}
}
Babel + JSX
const DB = {
userLogins: [
{
user: 'yoda',
pass: '1234'
},
]
};
class Error extends React.Component {
render() {
let errorStyle = {backgroundColor: 'red', padding: '10px', color: '#fff', borderRadius: '10px'};
return (
<span className="component-error" style={errorStyle}>
<strong>Error:</strong> {this.props.message}
</span>
);
}
};
class LoginPanel extends React.Component {
constructor() {
super();
this.state = {
loggedIn: false,
error: false,
account: {}
};
}
isLoggedIn() {
return this.state.loggedIn;
}
hasError() {
return this.state.error;
}
renderHeadline() {
if(this.hasError()) {
return <Error message="UngĂĽltiger Login!"/>;
}
let {user} = this.state.account;
return (this.isLoggedIn() ? `Hey, ${user}!` : `Anmelden`);
}
renderLoginForm() {
return (
<div>
<input type="text" ref="user" placeholder="Ihr Benutzername..." />
<input type="text" ref="pass" placeholder="Ihr Passwort..." />
</div>
);
}
renderLoginLogoutButton() {
let label = (this.isLoggedIn() ? 'Logout' : 'Login');
return <button type="submit" onClick={() => this.onSubmit()}>{label}</button>;
}
renderHiddenContent() {
return <div>Yoda: Good, the dark side is!</div>;
}
render() {
return (
<div className="component-login">
<h3>{this.renderHeadline()}</h3>
{(!this.isLoggedIn() ? this.renderLoginForm() : this.renderHiddenContent())}
{this.renderLoginLogoutButton()}
</div>
);
}
onSubmit() {
if(this.isLoggedIn()) {
// user wants to logout
this.setState({loggedIn: false, error: false, account: {}});
return;
}
// get the input values
let user = this.refs.user.value;
let pass = this.refs.pass.value;
// check is user valid
let userData = DB.userLogins.find((account) => {
return (account.user === user &&...