inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Slack 클론 코딩[실시간 채팅 with React]

axios로 요청 보내기와 CORS, proxy

회원가입 페이지 모달관련 질문

392

..

작성한 질문수 5

0

회원가입 페이지를 구현하면서 실패시 SignupError를 모달에 props로 전달하려고합니다.

근데 다음과 같이 모달에서 바인딩 요소 'string'은 암시적으로 'any' 유형을 가진다고 에러가 발생하는데

해당 이유에 대해서 궁금해 질문드립니다.

참고자료 함께 첨부하겠습니다.

 

  1. pages/signup

const [signupError, setSignupError] = useState('');

 axios
        .post('/api/users', {
          email,
          nickname,
          password,
        })
        .then(response => {
          console.log(response);
          setSignupSuccess(true);
        })
        .catch(error => {
          console.log(error.response);
          setSignupError(error.response.data);
        });
      console.log(email, nickname, password);
    }

 {signupError && <Error error={signupError} />}

 

  1. components/modal

import React from 'react';

const Modal = ({ error: string }) => {
  return (
    <ModalWrapper>
      <header>Error!</header>
      <div>{error}</div>

      <ModalBtn>확인</ModalBtn>
    </ModalWrapper>
  );
};

export default Modal;

 

  1. 에러 로그H to H - Chrome 2022-12-11 오후 11_23_03.png

클론코딩 typescript 웹팩 babel react Socket.io

답변 1

0

제로초(조현영)

타이핑이 틀렸습니다.

({ error }: { error: string }) 입니다

0

..

답변 감사합니다.

제로초님이 답변해주시기전에 구글링을 통해 interface로 다음과 같이 문제를 해결했는데

말씀해주신 방법과 아래 방법 중 어떤 방법을 좀 더 권장하시는지 궁금합니다.

 

import React from 'react';

interface propsType {
  error: string;
}

const Modal = (error: propsType) => {
  return (
    <>
      <header>Error!</header>
      <div>{error}</div>
    </>
  );
};

export default Modal;

0

제로초(조현영)

인터페이스 분리가 보기에 더 좋습니다.

0

..

늦은 시간에 답변 감사합니다.

마지막으로 state의 props전달과정에서 궁금한 점이 있습니다.

첫질문에서 언급했듯 저는 회원가입페이지에서 오류가 발생하면 해당 오류를 props로 모달 컴포넌트에 전달하고 있습니다.

근데 Objects are not valid as a React child 에러가 발생해서 콘솔을 찍어보니 회원가입페이지는 string타입, props를 전달받은 모달에서은 JSON 타입더라고요.

에러는 해결했지만 어떤 이유로 다른 데이터 타입이 전달되는지, 제가 해결한 방법보다 더 나은 방법이 있는지 궁금해서 질문드립니다.

참고자료 함께 첨부하겠습니다.

 

1 회원가입 페이지 (에러를 props를 통해 모달로 전달)

const [signupError, setSignupError] = useState('');

 axios
   .post('/api/users', {
     email,
     nickname,
     password,
 })
    .then(response => {
       console.log(response);
       setSignupSuccess(true);
    })
    .catch(error => {
       console.log(error.response);
       setSignupError(error.response.data);
    });
      console.log(email, nickname, password);
    }

 console.log(`signupError 에러는 이것 ${signupError}`);

 {signupError && <ErrorModal error={signupError} />}

 

2 모달 (전달받은 props의 형태가 이상해보입니다.)

interface propsType {
  error: string;
}

const ErrorModal = (error: propsType) => {
  console.log(`모달의 에러는 error는 이것 ${error}`);
  console.log(`모달의 에러는 error는 이것 ${JSON.stringify(error)}`);

  return (
    <>
        // <div>{error}</div> 다음과 같이 작성했더니 오류

        <div>{error.error}</div> // 이렇게 작성해서 오류를 해결
    </>
  );
};

export default ErrorModal;

 

3 콘솔결과

image

0

제로초(조현영)

props 자리 이름을 error로 지으셨는데요? props: propsType이라고 생각해보세요

0

..

덕분에 이해가됬습니다. 감사합니다.

기본 셋팅과 관련하여

0

93

1

초기 셋팅 back과 front만 남겨두고 다 지운 후 진행 방법

0

98

2

focus 시에만 화면 업데이트 되는 이유 + 해결방법

0

150

2

useEffect 개수 관리

0

111

2

라이브러리 서치 방법

0

105

2

함수 정의 패턴

0

77

1

npm run dev 에러

0

152

3

npx webpack 후 에러

0

178

2

'void' 형식 식의 truthiness를 테스트할 수 없습니다.ts(1345)

0

146

2

사용자 가입시 에러발생 (TypeError: Cannot read properties of null (reading 'addMembers')

1

179

2

초기세팅중 packge.json 에러떠요

0

157

2

CORS - Access-Control-Allow-Origin 누락 문제

0

431

3

로그인 페이지 무한 새로고침 현상

0

598

2

Module not found: Error: Can't resolve './App' 에러

0

959

1

배포 방법

0

299

2

npm run dev 시 빌드가 매우 느려졌습니다

0

993

2

alias 경로 설정 오류

0

453

2

fetcher 함수의 data 값이 두번 찍히는 이유

0

278

1

제네릭 질문

0

219

2

ts-node 대신 tsx 사용여부

0

373

1

배포 관련 질문

0

247

1

[nginx + https] 서비스를 실행하면 niginx가 아닌 서비스 화면을 보여주게 하고 싶습니다.

0

386

2

[배포하기] webpack에 aws 퍼블릭 IPv4 주소 와 포트 주소를 작성하고 나서 빌드후 실행하면 오류가 발생합니다.

0

336

1

users 호출 시 쿠키가 담기지 않는 이슈 질문드립니다.

0

247

2