일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react
- You are importing createRoot from "react-dom" which is not supported. You should instead import it from "react-dom/client"
- 인프런
- Spring-Framework
- 노드에 리액트 추가하기
- 리액트
- 웹 게임을 만들며 배우는 리액트
- spring-boot
- DB Browser
- intellij
- 따라하며 배우는 노드 리액트 기본 강의
- intllij 내 Bean을 찾지 못해서 발생하는 오류
- JS 개념
- react오류
- 거북이 대포 게임
- googleColaboratory
- node.js 설치
- 모두의 파이썬
- vs code 내 node
- 자바스크립트
- ReactDOM.render is no longer supported in React 18. Use createRoot instead
- 계산맞추기 게임
- Concurrently
- props
- Do it 자바스크립트 + 제이쿼리 입문
- 타자 게임 만들기
- Python
- Colaboratory 글자 깨짐
- node.js로 로그인하기
- 모던자바스크립트
- Today
- Total
프로그래밍 삽질 중
client(react)와 server(node.js) 연결하기 - 인증하기 중 오류 발생 본문
* 인프런의 "따라하며 배우는 노드, 리액트 시리즈 - 기본 강의" 내용 중 정리
* 오류를 따로 정리하는 페이지(컴퓨터 설정&오류)가 있으나 강의와 직접적인 오류라 생각해 이 곳에 정리
* 회원가입, 로그아웃, 인증하기 순서로 이어져야 하나 도중 인증하기에서 오류가 발생해서 남김
* 문제 원인 : 강의 내용 중 hoc/auth.js를 작성 후 코드 실행 시(npm run dev) 화면에 빈 화면 나옴
오류 내용 : unctions are not valid as a React child. This may happen if you return a Component instead of <Component /> from render. Or maybe you meant to call this function rather than return it.
- 해결책 : AuthenticationCheck 리턴 시 함수로 리턴하는 것이 아닌 JSX 컴포넌트로 리턴하라고 함
auth.js의 마지막 부분을 return AuthenticationCheck -> return <AuthenticationCheck />로 변경
- 해결에 도움을 준 글 : https://www.inflearn.com/questions/357383
[hoc/auth.js 코드]
import React, { useEffect } from "react";
import { useDispatch } from "react-redux";
import { auth } from "../_action/user_action";
import { useNavigate } from "react-router-dom";
export default function (SpecificComponent, option, adminRoute = null) {
//option : null = anyone, true = login user only, false = logout user only
function AuthenticationCheck(props) {
const dispatch = useDispatch();
const navigate = useNavigate();
useEffect(() => {
dispatch(auth()).then((response) => {
console.log("auth? ", response);
// 로그인 하지 않은 상태
if (!response.payload.isAuth) {
if (option) {
navigate("/login");
}
} else {
//로그인한 상태
if (adminRoute && !response.payload.isAdmin) {
navigate("/");
} else {
if (option === false) {
navigate("/");
}
}
}
});
}, []);
return (
<SpecificComponent /> // component return이 없으면 React 실행이 안됨.
);
}
return <AuthenticationCheck />;
}
- 왜 바꾸어야 하나?
- 함수 컴포넌트의 리턴값을 살폈을 때 JSX컴포넌트로 된 경우가 대다수
- 함수형이라고 쓰지 않은 이유는 공식 문서에서도 함수 컴포넌트라고 언급해서(https://ko.reactjs.org/tutorial/tutorial.html)
설명에 참고 : (https://chanhuiseok.github.io/posts/react-4/)
* 위에서의 AuthentiationCheck : 컴포넌트
- 컴포넌트의 종류는 함수형과 클래스형 컴포넌트로 나뉨
함수 컴포넌트 | 클래스형 컴포넌트 |
function으로 정의 return문에 JSX 코드를 반환함 |
class를 정의하고 render()함수에서 JSX 코드 반환 |
* 설명에 참고 : (https://goddaehee.tistory.com/296)
* JSX 코드란?
- javascript에 XML 추가된 확장한 문법
- JSX는 리액트 개발 시 사용
예)
function App() {
return (
<h1>modern javascript</h1>
)
};
//위와 같이 작성 시 아래처럼 해석함
function App() {
return React.creactElement("h1", null, "modern javascript");
}
* 리액트 함수 컴포넌트 반환 값 중 한 가지가 컴포넌트
* 설명에 참고 : (https://hsp0418.tistory.com/114)
* 참고 : 함수형 컴포넌트가 아닌 함수 컴포넌트라고 부르는 것이 정확한 표현이라는 글
'과거 프로그래밍 자료들 > React' 카테고리의 다른 글
[인프런 강의]리액트 무비앱 시리즈1 - LandingPage(1) (0) | 2022.05.17 |
---|---|
client(react)와 server(node.js) 연결하기 - proxy 연결 오류 (0) | 2022.05.16 |
client(react)와 server(node.js) 연결하기 - 로그인 하기(클라이언트 부분) (0) | 2022.05.11 |
client(react)와 server(node.js) 연결하기 - 로그인 하기(서버부분) (0) | 2022.05.11 |
client(react)와 server(node.js) 연결하기 (0) | 2022.05.10 |