Django 프로젝트02 - 리액트와 SPA 방식으로 인스타그램 만들기(6)
2020년08월20일에듀캐스트 장고&리액트 강의를 듣고 정리하는 글이다.
리액트 기본 기능으로 회원가입 폼 만들기
serializers
import React, { useState, useEffect } from "react";
import { Alert } from "antd";
import { useHistory } from "react-router-dom";
import Axios from "axios";
export default function Signup() {
const history = useHistory();
const [inputs, setInputs] = useState({ username: "", password: "" });
const [loading, setLoading] = useState(false);
const [errors, setErrors] = useState({});
const [formDisabled, setFormDisabled] = useState(true);
// const [username, setUsername] = useState("");
// const [password, setPassword] = useState("");
const onSubmit = (e) => {
e.preventDefault();
setLoading(true);
setErrors({});
Axios.post("http://localhost:8000/accounts/signup/", inputs)
.then((response) => {
console.log("response :", response);
history.push("/accounts/login");
})
.catch((error) => {
console.log("error:", error);
if (error.response) {
setErrors({
username: (error.response.data.username || []).join(" "),
password: (error.response.data.password || []).join(" "),
});
}
})
.finally(() => {
setLoading(false);
});
};
useEffect(() => {
const isEnabled = Object.values(inputs).every((s) => s.length > 0);
setFormDisabled(!isEnabled);
}, [inputs]);
const onChange = (e) => {
const { name, value } = e.target;
setInputs((prev) => ({
...prev,
[name]: value,
}));\
};
return (
<div>
<form onSubmit={onSubmit}>
<div>
<input type="text" name="username" onChange={onChange} />
{errors.username && <Alert type="error" message={errors.username} />}
</div>
<div>
<input type="password" name="password" onChange={onChange} />
{errors.password && <Alert type="error" message={errors.password} />}
</div>
<input
type="submit"
value="회원가입"
disabled={loading || formDisabled}
/>
</form>
</div>
);
}