Я использую шаблон Creative Tim для своего реактивного проекта, где у меня есть шаблон входа (код следующий):
import React from "react";
// reactstrap components
import {
Button,
Card,
CardHeader,
CardBody,
CardFooter,
Form,
Input,
InputGroupAddon,
InputGroupText,
InputGroup,
Container,
Col
} from "reactstrap";
// core components
import ExamplesNavbar from "components/Navbars/ExamplesNavbar.js";
import TransparentFooter from "components/Footers/TransparentFooter.js";
function LoginPage() {
const [firstFocus, setFirstFocus] = React.useState(false);
const [lastFocus, setLastFocus] = React.useState(false);
React.useEffect(() => {
document.body.classList.add("login-page");
document.body.classList.add("sidebar-collapse");
document.documentElement.classList.remove("nav-open");
window.scrollTo(0, 0);
document.body.scrollTop = 0;
return function cleanup() {
document.body.classList.remove("login-page");
document.body.classList.remove("sidebar-collapse");
};
});
return (
<>
<ExamplesNavbar />
<div className="page-header clear-filter" filter-color="blue">
<div
className="page-header-image"
style={{
backgroundImage: "url(" + require("assets/img/login.jpg") + ")"
}}
></div>
<div className="content">
<Container>
<Col className="ml-auto mr-auto" md="4">
<Card className="card-login card-plain">
<Form action="" className="form" method="">
<CardHeader className="text-center">
</CardHeader>
<CardBody>
<InputGroup
className={
"no-border input-lg" +
(firstFocus ? " input-group-focus" : "")
}
>
<InputGroupAddon addonType="prepend">
<InputGroupText>
<i className="now-ui-icons ui-1_email-85"></i>
</InputGroupText>
</InputGroupAddon>
<Input
placeholder="Email"
type="text"
onFocus={() => setFirstFocus(true)}
onBlur={() => setFirstFocus(false)}
></Input>
</InputGroup>
<InputGroup
className={
"no-border input-lg" +
(lastFocus ? " input-group-focus" : "")
}
>
<InputGroupAddon addonType="prepend">
<InputGroupText>
<i className="now-ui-icons ui-1_lock-circle-open"></i>
</InputGroupText>
</InputGroupAddon>
<Input
placeholder="Password"
type="text"
onFocus={() => setLastFocus(true)}
onBlur={() => setLastFocus(false)}
></Input>
</InputGroup>
</CardBody>
<CardFooter className="text-center">
<Button
block
className="btn-round"
color="info"
href="#pablo"
onClick={e => e.preventDefault()}
size="lg"
>
Get Started
</Button>
<div className="pull-right">
<h6>
<a
className="link"
href="#pablo"
onClick={e => e.preventDefault()}
>
Need Help?
</a>
</h6>
</div>
</CardFooter>
</Form>
</Card>
</Col>
</Container>
</div>
<TransparentFooter />
</div>
</>
);
}
export default LoginPage;
Отдельно я смог реализовать PostForm. js, но это в формате Class (код выглядит следующим образом): \
import React, { Component } from 'react'
import axios from 'axios'
class PostForm extends Component {
constructor(props) {
super(props)
this.state = {
email: '',
password: ''
}
}
changeHandler = (e) => {
this.setState({[e.target.name]: e.target.value })
}
submitHandler = (e) => {
e.preventDefault()
console.log(this.state)
axios.post('https://jsonplaceholder.typicode.com/posts', this.state)
.then(response => {
console.log(response)
})
.catch(error => {
console.log(error)
})
}
render() {
const {email, password} = this.state
return (
<div>
<form onSubmit={this.submitHandler}>
<div>
<input type="text" name="email" value={email} onChange={this.changeHandler} />
</div>
<div>
<input type="password" name="password" value={password} onChange={this.changeHandler} />
</div>
<button type="submit">Submit</button>
</form>
</div>
)
}
}
export default PostForm
Я пытался объединить два, где я могу разместить имя пользователя и пароль, используя ax ios, но в шаблоне на основе функции Creative Tim , Может кто-нибудь помочь мне понять, как интегрировать это? Спасибо!