Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

한바다

[리액트]로그인 본문

React

[리액트]로그인

한바다진화 2024. 7. 15. 21:47

✅ 앱설치

npx create-react-app spring-front

npx create-react-paa tutorial-login

 

✔️[백엔드 주소 : 포트 와 연결하기 위해 설정]

"proxy" : "http://localhost:9090"

 

 

✅ 리액트 로그인

import React, {createContext} from "react";

//로그인을 한 다음에 로그인한 정보를 모든 창에 띄워주기
//App.js에서 <div>태그 대신에 <LoginContext> 태그로
//return 시작하자마자 감싸주면 <LoginContext>태그 안에 있는
//모든 태그에서는 로그인/로그아웃 한 정보가 공유됨
const LoginContext = createContext();

export default LoginContext;

 

[signUp.js]
-아이디중복검사-
import React, {useState} from "react";

const Signup = () => {
   const [id,setId] = useState('');
   const [pw,setPw] = useState('');
   const [pwCheck,setPwCheck] = useState('');
   const [name,setName] = useState('');
   
   const [result,setResult] = useState('');
   
   //아이디 중복검사
   const [idValidation,setValidation] = useState(false);
   //아이디 중복검사 이벤트 핸들러
   const 아이디중복검사 = (eventId) => {
   // eventId : 현재 입력하는 이벤트가 발생한 ID
      setId(evnetId);
    if(evnetID.trim().length < 4){
        setIdValidation(false);
        return;
    }
    //DB에 중복되는 아이디가 있는지 비동기로 아이디 중복검사 수행
    //axios나 fetch를 사용할 수 있음
    fetch("/idCheck?id=" + eventId) //SpringBoot Controller와 연결할 Mapping url
    .then(response => response.text())
    .then(result => {
          if(Number(result) === 0 ) {
             setIdValidation(true);
          
          } else {
             setIdValidation(false);
           }
          })
         }
         
         //회원가입버튼
         const 회원가입버튼 = () => {
            if(!idValidation) {
                alert('아이디가 유효하지 않습니다.');
                return;
         }
       //회원가입 비동기 요청
         const input값들 = {} 
         input값들.id = id;
         input값들.pw = pw;
         input값들.name = name;
         
         fetch("/signup",{
         //Spring Boot Container에 @PostMapping("/signUp") 에 전달하겠다는 표시
         method : "POST",
         headers : {"Content-Type" : "application/json"},
         body : JSON.stringify(input값들)
         
       })
       .then(response => response.text())
       .then(result => {
           if(Number(result) > 0) {
              setResult('회원가입성공!~');
              setId('');
              setPw('');
           
           } else {
              setResult('회원가입 실패~!');
           }
       
         })
         
        }
      
      return (
         <div className="signup-container">
         <lavel> ID :
         <input type="text"
            onChange={e => 아이디중복검사(e.target.value)}
            value={id}
            className={idValidation ? '' : 'id-err'}
            />
            </label>
           <label> 
            PW :
            <input type="password"
             onChange={e => {setPw(e.target.value)}}
             value={pwCheck} />
             </label>
             <label>
             Name:
             <input type="text"
              onChange={e => {setName(e.target.value)}}
              value={name} />
              <button onClick={회원가입버튼}>가입하기</button>
              <h3>{result}</h3>
           </div>
           )
          }
  export default Signup;

 

  로그인 백엔드 -스프링부트-

DBConfig.java

[임포트 생략 코드 작성]
@Configuration
@PropertySource("classpath:/config.properties")
public class DBConfig {
    @Autowired
    private ApplicationContext applicationContext;
    @Bean
    @ConfigurationProperties(perfix="spring.datasource.hikari")
    pulic HikariConfig hikariConfig() {
             return new HikariConfig();
       }
    @Bean 
    public DataSource dataSource(HikariConfig config) {
            DataSource dataSource = new HikariDataSource(config);
            return dataSource;
    }

    @Bean
    public SqlSessionFactory sessionFactory(DataSource dataSource) throws Exception {
            SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
            sessionFactoryBean.setDataSource(dataSource);
}

'React' 카테고리의 다른 글

[리액트]todoList연동  (0) 2024.07.18
[리액트]백엔드와 프론트 연결  (0) 2024.07.16
[리액트]Axios와 페이지네이션  (0) 2024.07.12
정규식 작성과 리액트 라우터  (0) 2024.07.11
리액트useState&스프링 gradle  (0) 2024.07.10