• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

Cannot read properties of undefined (reading 'data')

23.01.23 16:56 작성 조회수 1.58k

0

제로초님, 전 강의 듣고 할 때만 해도 잘 됐는데 오늘 쉬고 다시 해보니까 이런 오류 메세지가 뜹니다.

해결해보려고 해도 잘 안되네요..

Cannot read properties of undefined (reading 'data')

SignUp 폴더에서 index.tsx에 문제가 있다고 떠서 코드 올립니다

import useInput from "@hooks/useInput";
import React, { useCallback, useState } from "react";
import { Form, Label, Input, LinkContainer, Button, Header, Error, Success} from './styles'
import axios from "axios";
import {Link} from 'react-router-dom';

// 타입스크립트는 간단하게 말하면 변수, 매개변수, 리턴 값에 타입을 붙여줌
// 변수에는 딱히 타입을 붙여주지 않아도 된다 타입스크립트가 알아서 추론하기 때문에(리턴값도 마찬가지) 그러나 매개변수에는 붙여주어야됨
const SignUp = () => {
  const [email, onChangeEmail] = useInput('');//useInput은 커스텀 훅
  const [nickname, onChangeNickName] = useInput('');
  const [password, setPassword] = useState('');
  const [passwordCheck, setPasswordCheck] = useState('');
  const [mismatchError, setMismathError] = useState(false);
  const [signUpError, setSignUpError] = useState('');
  const [signUpSuccess, setSignUpSuccess] = useState(false);

  const onChangePassword = useCallback((e: any) => {
    setPassword(e.target.value);
    setMismathError(e.target.value !== passwordCheck);
    // 함수 기준으로 외부 변수만 deps에 적어줌 내부 변수는 x
  }, [passwordCheck]);

  const onChangePasswordCheck = useCallback((e: any) => {
    setPasswordCheck(e.target.value);
    setMismathError(e.target.value !== password)
  }, [password]);

  const onSubmit = useCallback(
    (e: any) => {
      e.preventDefault();
      if (!mismatchError && nickname) {
        console.log('서버로 회원가입하기');
        setSignUpError('');
        setSignUpSuccess(false);
        axios
          .post('/api/users', {
            email,
            nickname,
            password,
          })
          .then((response) => {
            console.log(response);
            setSignUpSuccess(true);
          })
          .catch((error) => {
            console.log(error.response);
            //여기가 문제가 있다고 뜹니다.
            setSignUpError(error.response.data);
          })
          .finally(() => {});
      }
    },
    [email, nickname, password, passwordCheck, mismatchError],
  );

  return (
    <div id="container">
      <Header>Sleact</Header>
      <Form onSubmit={onSubmit}>
        <Label id="email-label">
          <span>이메일 주소</span>
          <div>
            <Input type="email" id="email" name="email" value={email} onChange={onChangeEmail} />
          </div>
        </Label>
        <Label id="nickname-label">
          <span>닉네임</span>
          <div>
            <Input type="text" id="nickname" name="nickname" value={nickname} onChange={onChangeNickName} />
          </div>
        </Label>
        <Label id="password-label">
          <span>비밀번호</span>
          <div>
            <Input type="password" id="password" name="password" value={password} onChange={onChangePassword} />
          </div>
        </Label>
        <Label id="password-check-label">
          <span>비밀번호 확인</span>
          <div>
            <Input type="password" id="password-check" name="password-check" value={passwordCheck} onChange={onChangePasswordCheck} />
          </div>
            {mismatchError && <Error>비밀번호가 일치하지 않습니다.</Error>}
            {!nickname && <Error>닉네임을 입력해주세요.</Error>}
            {signUpError && <Error>{signUpError}</Error>}
            {signUpSuccess && <Success>회원가입되었습니다! 로그인해주세요.</Success>}
        </Label>
        <Button type="submit">회원가입</Button>
      </Form>
      <LinkContainer>
        이미 회원이신가요?&nbsp;
        <Link to="/login">로그인 하러가기</Link>
      </LinkContainer>
    </div>
  );
};
export default SignUp;

 

답변 1

답변을 작성해보세요.

0

백엔드 서버 안 켜신 것 아닌가요

성창수님의 프로필

성창수

질문자

2023.01.23

백엔드 서버는 켰습니다!

성창수님의 프로필

성창수

질문자

2023.01.23

이 문제가 개발자 도구에서 네트워크 탭을 키면 발생하더라구요...
개발자 도구를 켜지 않은 상태에서 회원가입이나, 로그인은 정상적으로 작동합니다 대신에 네트워크 탭에서 데이터 요청 내용이 보이지 않습니다
그래도 문제는 없는 건가요??

네트워크 탭에 오프라인으로 되어있는데요? 인터넷을 차단하신 겁니다.

성창수님의 프로필

성창수

질문자

2023.01.23

아 인터넷 키니까 되네요 감사합니다!!