#null

질문 5
해시태그 없이 키워드만 일치하는 질문은 개수에 포함되지 않아요.

3달 전 · 오범수 님의 새로운 댓글

API 응답값 중 뭐가 옳다고 생각하나요?

예를 들어 Movie는 Title과 score로 이루어져있습니다. 해당 movie 단건 조회 시 뭐가 옳다고 생각하나요 1. { movie: null } 2. { movie: { title: null, score: null } }

투표

개발자

#rest-api

답변 10

댓글 1

추천해요 8

조회 5,299

7달 전 · 김인후 님의 새로운 답변

spring security에서 JWT를 사용할 때 질문이 있습니다.

SecurityConfig에서 .requestMatchers(HttpMethod.GET, "/boards/*/comments").permitAll() 이런 식으로 허용을 해주고 JwtAuthorizationFilter에서 accessToken이 유효하지 않으면 response에 토큰에 문제가 생겼다는 에러 메세지를 리턴을 하게 해뒀습니다. GET /boards/*/comments 요청을 보내면 해당 게시물의 댓글들을 조회를 해올 때 좋아요를 누른 상태인지 누르지 않은 상태인지 구분을 할때 문제가 생겼습니다. 로그인을 한 사용자는 댓글들을 조회할 때 좋아요를 눌렀나 안눌렀나 확인을 해야하고 로그인을 하지 않은 사용자는 무조건 좋아요를 안 누른 상태로 해야되는데 JwtAuthorizationFilter에서 에러 메세지를 리턴을 하되면 로그인을 해야지만 조회가 되는 문제가 생기고 JwtAuthorizationFilter에서 에러 메세지를 리턴하는 코드를 빼자니 모든 Controller쪽에서 null체크를 해줘야 하고... 감을 못잡겠습니다ㅜ_ㅜ

개발자

#java

#spring

답변 1

댓글 0

조회 59

8달 전 · 이윤호 님의 새로운 답변

webview_flutter 안드로이드 cookie 질문이요...

회사에서 부득이하게 앱개발자 없이 앱개발을 해야하는 상황이라 웹으로 만들고 flutter 웹뷰를 만들었습니다. iOS에서는 쿠키에 jwt가 저장되서 자동로그인 기능이 잘 작동되고 있는데요, 안드로이드에서는 cookie를 따로 관리를 해줘야 한다고 하더라구요... 그래서 webview_cookie_manager 와 flutter_secure_storage를 이용해서 onPageFinished가 될 때 main page이면 cookieManager.getCookies로 jwt를 가져오고 storage.write로 쿠키를 저장해 주고 있습니다. 그리고 initState()할때 Future<void> _loadStoredCookies() async { final jwt = await storage.read(key: 'jwt'); print('jwt : $jwt'); if (jwt != null) { final cookieManager = WebviewCookieManager(); await cookieManager.setCookies([ Cookie('jwt', jwt) ..domain = "메인페이지" ..path = "/" ..secure = true ..httpOnly = true ]); bool hasCookies = await cookieManager.hasCookies(); print('쿠키가 존재하는가? $hasCookies'); } } 이렇게 쿠키를 확인하고 쿠키를 set해주는데 백그라운드에서 앱을 완전히 종료시키고 다시 실행하면 쿠키가 사라지더라고요... 왜 그런건가요...??

개발자

#flutter

#cookie

#android

답변 1

댓글 0

조회 220

8달 전 · 익명 님의 질문 업데이트

마이크로 프론트 구현(Nextjs, React)

요구사항 마이크로 프론트엔드로 A라는 프로젝트에서 B라는 프로젝트의 컴포넌트를 사용하고 싶다 프로젝트 설명 ModuleFederationPlugin 사용해서 expose remote 설정 A 프로젝트 (remote) : react, styled-component 사용 B 프로젝트 (expose) : nextjs, scss 사용 첫번째 오류 styled 이 달라서 nextjs 에서 노드가 불러와지지 않는 것 해결 : <noscript id="**next_css__DO_NOT_USE**"></noscript> → 두번째 오류 발생 오류 내용 Cannot read properties of null (reading 'parentNode') TypeError: Cannot read properties of null (reading 'parentNode') at options.insert (webpack- 두번째 오류 Nextjs 에서 expose 할 때 Page 컴포넌트에 있는 useState를 사용 못한다고함 해결 : peerDependencies 로 nextjs 추가 → 오류동일 오류 내용 TypeError: Cannot read properties of null (reading 'useState') at useState (react.development.js:1623:21) at Page (index.js:8:40) react-dom.development.js:18704 The above error occurred in the <Page> component: 참고 : https://dev.to/omher/building-react-app-with-module-federation-and-nextjsreact-1pkh 두번째 오류를 해결해야 되는데 가능한 방법인지 모르겠습니다. 아시는 분은 댁글 남겨주세요~(코드상에 보안상 문제되는 부분은 a b 로 바꿨습니다.

개발자

#micro-frontend-architecture

#react

#next.js

#modulefederationplugin

답변 0

댓글 0

조회 251

8달 전 · 우엉김밥 님의 질문

채팅 디비 설계 질문이요!

안녕하세요:) 저는 ! 웹소켓과 관계형디비+프리즈마 를 이용해서 백엔드를 구성하고, 리액트로 만든 프론트 와 양방향 채팅 서비스를 만들려고 합니다! 채팅방 DB스키마를 작성하는데 어려움을 겪어 질문을 남깁니다. 현재 프리즈마에서 model ChatRoom { id Int @id @default(autoincrement()) name String creatorId Int users ChatRoomUser[] messages Message[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model ChatRoomUser { id Int @id @default(autoincrement()) userId Int // 외부 API에서 가져올 사용자 ID chatRoomId Int chatRoom ChatRoom @relation(fields: [chatRoomId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @@unique([userId, chatRoomId]) } model Message { id Int @id @default(autoincrement()) chatRoomId Int senderId Int // 외부 API에서 가져올 사용자 ID receiverId Int? // 선택적 필드, 단체 채팅에서는 null content String timestamp DateTime @default(now()) chatRoom ChatRoom @relation(fields: [chatRoomId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @default(now()) } 이런식으로 구현하였는데 조언좀 부탁드립니다.ㅠㅠ

개발자

#db

#스키마

#node

#prisma

#설계

답변 0

댓글 0

보충이 필요해요 1

조회 78

10달 전 · 지민성 님의 질문

React Spring 배포과정 중 의문의 404

react + spring boot로 진행하는 프로젝트가 현재 cloudtype이라는 플랫폼으로 배포중에 있습니다. 문제는 정확한 서버주소를 호출하는 것 같음에 불구하고 404 에러가 발생하여 해결하지 못하고 있습니다. 현재, 아래 사진과 같은 로그가 클라이언트, 서버에 각각 발생합니다. 서버에서는 다음과 같이 구성되어있고 @RestController @RequestMapping("/v1/login") @RequiredArgsConstructor @CrossOrigin(origins = "https://web-secondchance-front-bug-1cupyg2klvnmgdft.sel5.cloudtype.app") public class KakaoController { private final KakaoService kakaoService; private final Logger LOGGER = LoggerFactory.getLogger(KakaoController.class); @PostMapping("/kakao-login") public ResponseEntity<UserDto> kakaoLogin(@RequestBody KakaoLoginDto kakaoLoginDto) { String code = kakaoLoginDto.getCode(); LOGGER.info("Get Code from FrontEnd : {}", code); LOGGER.info("Request getAccessToken()"); kakaoLoginDto = kakaoService.getAccessToken(code); String accessToken = kakaoLoginDto.getAccess_token(); LOGGER.info("access_token : {}", accessToken); if(accessToken != null){ UserDto userDto = kakaoService.getUserInfo(accessToken); return ResponseEntity.ok(userDto); } else { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } // accessToken이 null임에도 getUserInfo를 부름. // 안부르게 끔 위의 방법을 포함하여 // 1. map에서 true, false를 사용하여 해봄 // 2. getAccessToken을 map객체로 반환하게끔 하여 accessToken이 있으면 true, 없으면 false로 하여 isEmpty 함수로 체크하여 부름 // 위의 두 방법 전부 소용없음. 그냥 getUserInfo를 부름. } @PostMapping("/kakao-logout") public String kakaoLogout(){ return "ok"; } } 현재 리액트에서는 다음과 같이 axios.post로 접근하여 code를 전달합니다. 무엇이 문제일까요?

개발자

#react

#spring-boot

#배포

#404

답변 0

댓글 0

추천해요 1

조회 147

일 년 전 · 삭제된 사용자 님의 질문 업데이트

COPY(PG) GC 오버헤드 에러

안녕하세요. 대용량의 텍스트 파일을 postgreSql에 적재하는 모듈을 개발하고 있습니다. copy 함수를 활용하여 텍스트 파일('|'으로 구분되어 있는)을 테이블에 insert 하는데 헤더 스킵을 위해 csv로 parsing하려고 합니다. 근데 파일이 커서 그런가(8GB정도) 'OutOfMemoryError : gc overhead limit exceeded' 에러가 계속 발생합니다.. (어떨 땐 에러 없이 잘 들어가기도 합니다) 코드 중에 불필요한 구문이 있는 건지 판단이 잘 안됩니다... 또 csv로 파싱하지 않고 텍스트 파일의 첫째 줄을 지우고 copy로 밀어 넣는 방법이 있을까요? --------구현 코드-------- try ( BaseConnection c = dataSource.getConnection().unwrap(BaseConnection.class)) { try ( PGCopyOutputStream os = new PGCopyOutputStream(c, "COPY " + tableName + " FROM STDIN WITH (FORMAT CSV)"); CSVPrinter writer = new CSVPrinter(new OutputStreamWriter(os, StandardCharsets.UTF_8), CSVFormat.POSTGRESQL_CSV); CSVParser reader = new CSVParser(new InputStreamReader(inputStream, charset), CSVFormat.INFORMIX_UNLOAD.withFirstRecordAsHeader())) { for (CSVRecord row : reader) { for (String col : row) { if (col != null && StringUtils.hasText(col.trim())) { writer.print(col.trim()); } else { writer.print(null); } } writer.println(); } } } *inputStream은 해당 파일 BufferedInputStream 객체입니다.

개발자

#postgresql

#error

답변 1

댓글 1

조회 75

일 년 전 · 익명 님의 질문

템플릿 <<연산자 오버로딩이 궁금합니다.

template<typename E > class Node { public: Node() : next(nullptr), prev(nullptr) {} bool operator<(Node N) { return N.data < data; } bool operator>(Node N) { return N.data > data; } template<typename E> friend ostream& operator<<(ostream& os, const Node<E>& N) { os << N.data; return os; } private: E data; Node<E>* next; Node<E>* prev; friend class LinkedList<E>; }; 다른print 함수{cout<<Node객체.data} 이렇게 E타입의 data를 <<로 출력해야 하는데 [ C2679 이항 '<<': 오른쪽 피연산자로 'const E' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다. ] ​ 자꾸 위와 같은 오류가 뜹니다... 그래서 template<typename E>를 연산자 오버로딩 앞에 붙여봐도 ​ [ C2995 'std::ostream &operator <<(std::ostream &,const Node<E> &)': 함수 템플릿이 이미 정의되었습니다. ] 이런 오류가 발생하구요. 템플릿 타입을 <<로 어떻게 출력하나요??

개발자

#c++

#템플릿

#오버로딩

답변 0

댓글 0

보충이 필요해요 1

조회 60

일 년 전 · 허니 님의 새로운 답변

프론트에서는 관계형디비로 되어있는 백엔드에서 주는 응답 그대로 타입으로 써야하나요?

안녕하세요 예를들어 서버에서 아래와같이 응답을 준다고 할떄 end point : aimal/[id] response : { id:1 name:'코끼리', weight:1000, color: 'grey' } end point : getAnimals response:{ total_length:1, data:[{ id:1 name:'코끼리', weight:1000, } ] } 물론 위의 예시처럼 갑자기 배열로 호출시 특정 키(위 예시에서는 color)를 빼는 경우는 없겠지만, 비즈니스 로직을 처리하다보면 위와 같이 특정 api에서는 딱히 필요없는 값이라서 특정키가 빠지는 경우가 있더라구요 그런데 프론트엔드 입장에서 type Animal = { id:number; name:string; weight:number; color:Color } 이런식으로 타입을 정의해놓으면 특정 키가 들어오지 않았을 때 대응이 안되서 결국 모든 키를(id같은 특수 키 제외)nullable하게 해야하는것 같은데 좀 이상하기도 하고... 일반적으로 이런경우는 어떻게 해결하시나요?

투표

개발자

#react

#rdbms

답변 2

댓글 1

조회 98

일 년 전 · Angela 님의 새로운 댓글

디비에는 저장이되는데 리스트조회하면 null로 나오는 이유

숙소등록하고 조회했는데 null값이나옵니다.. List<AccommodatuonsVo>로 임폴트 util로 했습니다 마이바티스로 작업한 쿼리를 디비에 조회했을때 제대로 나옵니다.. 매핑도 dto로 저장하고 vo로 리스트로 조회했는데 필드와 칼럼명도 확인했습니다 서비스랑 컨트롤러도 로직도 공지사항이나 문의글 처럼 동일하게했거든여.. 다른점은 외래키설정때문일까요... db에 저장될때 null값 없이 저장됐는데 리스트로 조회하니 null이 나오는게 이해가 안돼요...........

개발자

#null

#리스트조회오류

#스프링부트

#마이바티스

답변 1

댓글 1

보충이 필요해요 1

조회 136

일 년 전 · 털먹는토끼 님의 새로운 댓글

타입스크립트 'value' is possibly 'null' 에러 옵셔널체이닝으로 해결안되는 이슈

import DateRangePicker from "@wojtekmaj/react-daterange-picker"; import { useDispatch } from "react-redux"; import { dateFetch } from "components/feature/FetchSlice"; import styled from "styled-components"; type ValuePiece = Date | null; type Value = ValuePiece | [ValuePiece, ValuePiece]; export default function CustomCalendar() { const dispatch = useDispatch(); const [value, onChange] = useState<Value>([new Date(), new Date()]); return ( <CalendarBox> <Calendar>조회 기간</Calendar> <StlyedDateRangePicker onChange={onChange} value={value} onCalendarClose={() => { dispatch( dateFetch({ startDate: value[0]?.toISOString(), endDate: value[1]?.toISOString(), }) ); console.log(value); }} /> </CalendarBox> ); } <StlyedDateRangePicker>는 styled component로 만든 DateRangePicker 라이브러리 컴포넌트입니다. DateRangePicker 에서 날짜 2개를 선택하면 value라는 배열에 Date 객체 2개가 들어갑니다. 그리고 onCalendarClose 함수가 동작하면서 redux로 만들어놓은 startDate, endDate 객체에 각각 date를 toISOString() 처리한 값이 할당되는 로직입니다. 날짜를 선택하기 전에는 value={value}의 value 배열요소인 Date객체 값이 null 값이니까 type ValuePiece = Date | null; 타입지정을 해줬습니다. startDate: value[0]?.toISOString(), endDate: value[1]?.toISOString(), 근데 위 코드의 value[0], value[1] 에러가 나더라구요. 'value' is possibly 'null'.ts(18047) Element implicitly has an 'any' type because expression of type '0' can't be used to index type 'Date | [ValuePiece, ValuePiece]'. Property '0' does not exist on type 'Date | [ValuePiece, ValuePiece]'. null 값일 수도 있다길래 옵셔널체이닝을 줬는데 여전히 에러가 발생합니다.. 해결방법을 도무지 모르겠네요.. 도와주시면 진심으로 감사하겠습니다ㅠㅠㅠ

개발자

#react

#typescript

#optional-chaining

답변 3

댓글 3

조회 265

일 년 전 · 최윤재 님의 새로운 댓글

react에서 에러 status에 따라 에러 모달을 가져오는 법

안녕하세요. 지금 api를 호출 후에 api에서 에러가 났을 때, 해당 에러의 status를 저장하여 해당 status에 맞는 에러 모달을 띄워주려고 하고 있습니다. ``` catch (error: unknown) { if (error instanceof AxiosError) { handleErrorModal(error.response?.status); } return null; } ``` 이렇게 fetchData에서 에러가 발생했을 때, handleErrorModal로 에러 status를 전달하고 있습니다. ``` const [errorType, setErrorType] = useRecoilState(errorDataState); const handleErrorModal = (errorStatus: string | number | null) => { setErrorType(errorStatus); }; ``` 그리고 handleErrorModal 함수는 이와 같이 작성을 해놓은 상태이고요. 근데, setState가 비동기로 작동해서인지 errorStatus가 저장이 되지 않아서 계속 초기값인 null을 띄워줍니다. 그리고, 계속 ``` Warning: Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously later calls tries to update the component. Move this work to useEffect instead. ``` 이 오류를 띄우네요. 이 문제를 해결하기 위해서는 useEffect를 쓰는 방법외에는 다른 방법이 없는걸까요?

개발자

#react

#react-query

답변 1

댓글 1

조회 99

일 년 전 · 김연호 님의 답변 업데이트

JMeter Websocket테스트 질문드립니다

JMeter로 Websocket 테스트를 구현해야 하는 상황인데 테스트 진행하는 도중 아래 에러가 나서 찾아보니 Single Write Sampler에 Data 인코딩 문제로 추측만 되고 있습니다... Failed to parse TextMessage payload=[SEND desti..], byteCount=242, last=true] in session ujvhyrid. Sending STOMP ERROR to client. org.springframework.messaging.simp.stomp.StompConversionException: Frame must be terminated with a null octet JMeter Sampler 인코딩 UTF-8로 설정하는건 찾아서 해봤는데 그래도 안되네요...ㅠㅠ 정말로 인코딩 문제인지 혹시 동일한 경험이 있으신 분이 계실까요? 구글링을 해도 자료를 못찾겠고.. 사내에 해당 지식을 가지신 분도 전무하셔서 너무 답답해서 질문남겨봅니다....

개발자

#jmeter

#websoket

답변 1

댓글 0

조회 256

일 년 전 · 박대영 님의 질문 업데이트

스프링을 통해 캐싱 중 오류가 발생했습니다

안녕하세요 먼저 오류 종류에 대해서 말씀드리면 Null key returned for cache operation입니다 @Cacheable, @CachePut, @CacheEvict 모두 key값에다가 파라미터의 이름과 같이 key="#id"를 주었습니다. 그러자 위와 같은 에러가 발생하였습니다 id라는 변수명이 문제인가? 라는 생각을 가지고 다른 것으로 바꾸어 봤지만 똑같은 문제가 발생했습니다. 일단 해결방법은 defaultKey 값을 사용하거나 파라미터를 직접 key="#p0" 이렇게 하니 해결이 되었습니다. 구글링해도 아래와 같은 방법으로 해결하는 말만 있고 위에서와 같이 변수명을 사용할 때의 문제점이 안나와서 질문 올립니다!

개발자

#spring

#cache

#캐싱

답변 0

댓글 0

추천해요 1

조회 547

일 년 전 · Angela 님의 새로운 댓글

숙소등록시 숙소테이블,객실정보테이블 을 동시에 넣어서 외래키 null값 오류

완전신입입니다.. 몇일를찾아보고 해도 제가 로직을 잘못짠건지 모르겠어서 질문을 남깁니다 숙소등록을 구현중인데 숙소테이블accommodation, 객실정보테이블room_info 두개를 나눴고 객실정보테이블에 aid(숙소테이블 기본키) 외래키로 설정을 했습니다 그리고 마이바티스에 각 테이블별로 insert로 넣었고 MySql 자동키 부분 설정도하였습니다. 서비스단을 각 두개의 클래스를 묶고 roominfo에 aid를 받아서 저장하는 로직으로 넣었습니다 그리고 컨트롤단에서 PostMapping으로 두개를묶은 클래스를 파라미터로 넣었습니다 ㅠㅠ 여기서 궁금한게 1. 테이블을 나눠서 한번에 저장할 때 다른분들은 어떻게 처리하는지 궁금합니다. 2. 숙소등록을 입력할때 필드값이 동시에 진행되는부분이라 객실테이블에 지정된 외래키aid 가 아직 없으니까 null값으로 들어가서 자꾸 aid를 찾을수없다는오류가 나오는데 이 부분을 어떤식으로 처리해야하는지 키워드를 말씀해주시면 감사하겠습니다...

개발자

#스프링부트

#외래키

#null

#마이바티스

답변 1

댓글 1

조회 172

일 년 전 · 김도열 님의 새로운 댓글

RDB에서 복합키를 참조하는 외래키에 NULL이 있다면 부모에 없는 값이 들어갈 수 있는 이유가 궁금합니다.

결론부터 말씀드리자면 부모테이블에 복합키를 참조하는 자식테이블에 외래키가 nullable하게 설정했을 때, 왜 부모에 없는 값을 허용하는지 이유 또는 구동 원리가 궁금합니다. 간단한 예 부모-자식 관계(FK걸려있음)일 때 부모에는 단 두 컬럼이 있으며, 복합키(두컬럼 모두 PK) 자식은 두 컬럼을 참조하는 컬럼 2개만 존재하며 nullable하다. 부모에는 (1, 'A') 라는 값이 있으면 왜 자식에 (null, '가나다') 값이 들어가도록 허용하는지에 대한 이유 또는 구동 원리가 궁금합니다! - 물론 외래키는 잘 걸려있습니다. 자세한 내용과 사례는 아래 링크를 통해서 정리를 해봤습니다. (링크는 댓글을 받기 위해 임시로 velog로 작성하였으며, 어디에 댓글을 달아주시던 상관없습니다) https://velog.io/@corder/외래키FK에-부모에-없는-값이-들어갔어요

개발자

#rdb

#fk

#외래키

답변 2

댓글 3

조회 234

일 년 전 · 초코칩 님의 새로운 답변

for문을 이용한 중복체크 방법

public MemberDTO doRegist() { sc.nextLine(); System.out.println("*****************************************************"); System.out.print("아이디를 입력하세요 : "); String id = sc.nextLine(); System.out.print("비밀번호를 입력하세요 : "); String pwd = sc.nextLine(); System.out.print("이름을 입력하세요 : "); String name = sc.nextLine(); System.out.print("나이를 입력하세요 : "); int age = sc.nextInt(); System.out.print("성별을 입력하세요 : "); char gender = sc.next().charAt(0); sc.nextLine(); System.out.print("핸드폰 번호를 입력하세요 : "); String phone = sc.nextLine(); System.out.print("이메일을 입력하세요 : "); String email = sc.nextLine(); System.out.println("*****************************************************"); MemberDTO user = null; if(answer == 'Y') { user = new MemberDTO(id, pwd, name, age, gender, phone, email); }else { System.out.println("로그인 페이지로 돌아갑니다."); mainLogin(); } return user; } 여기에 for 문으로 아이디 중복체크를 넣고 싶은데 어떻게 넣어야 할까요...ㅠㅠ...

개발자

#intellij-java

답변 1

댓글 0

보충이 필요해요 1

조회 148

일 년 전 · 장성호 님의 새로운 답변

데이터베이스에서 boolean 타입 기본값을 null로? false로?

ChatGPT에게 물어보니 null로 저장하는 것도 추가적으로 메모리가 필요하다고 얘기하는 데, false로 저장하는 것보다 조금 더 들 수 있다고 하네요. null보다 false로 저장하는 게 조금 더 효율적일 거라는데, 이게 사실인가요??

개발자

#database

답변 1

댓글 0

조회 143

일 년 전 · 김석현 님의 답변 업데이트

react query 내에서 과연 react hook을 사용해도 괜찮을까요? 에러 내용을 어떻게 뽑아내면 좋을까요?

안녕하세요. 이번에 로그인 시 에러가 날 때, 서버에서 보내주는 각각의 데이터값이 있는데 그것을 추출해서 활용하려고 합니다. 우선 아래 코드와 같이 useMutation (v5) 를 사용했구요. onError 에서 그 값을 추출해서 리턴하고 싶어했습니다. (error 의 타입은 Error 나 AxiosError 하면 해결되는 줄 알았는데, message 값까지 들어가면 타입 정의가 되지 않더라구요.. any를 바꿀 팁도 알려주시면 감사하겠습니다 ㅎ..) (* mutation 의 error의 return 값은 null 로 찍혔습니다..! *) 여튼, 콘솔로 값은 읽을 수 있으나 isError 값이나, error 객체도 원하는 결과값이 나오지 않고, 외부 리턴값으로 활용하는 방법이 떠오르지 않아, 일단 2가지 방법으로 추출을 시도했었습니다. - let 변수를 활용해서 상단에 선언 후에, error 시 재선언하여 값을 입력 - state를 정의하여 setState값으로 입히기 첫번째 방법은 항상 undefined로 읽혀지고, 두번째 방법은 서버 응답 속도에 따라서 값이 받아질 때가 있고, 아닌 경우는 기본 defaultState 값으로 읽혀집니다. 또한, 하나의 hook 내에서 다른 hook 을 선언해버리면 리액트의 훅 규칙을 어기는 것으로 알고 있습니다. 그러기에 위 방법은 옳지 않은 방법인 것 같아서, 옳은 에러 데이터 추출방법을 알고 싶습니다. 감사합니다 :)

개발자

#react

#react-query

#hook

#usemutation

답변 1

댓글 4

조회 523

일 년 전 · 이창협 님의 질문

타입스크립트 recoil 타입선언에 대한 질문입니다.

안녕하세요. redux를 recoil로 변경하면서 typescript도 같이 사용해보고 있는데 감이 잘 잡히지 않네요 타입스크립트에서 다른타입의 값을 가져와서 비교후 처리해야한다면 어떻게 해야할지 모르겠어서 질문을 드리게 되었습니다. 애초에 이러한 경우는 성립을 하지가 않는걸까요? 컴포넌트에서 deleteTagHandler에서 Tag타입으로 값을 받아와서 setRemoveToNoteTags()로 Tag타입의 매개변수 tag를 전달해주는데요 selector에서는 NotesList의 타입을 지원하고 있어서 그런거 같습니다... 가르침 부탁드리겠습니다 ㅠㅠㅠ 컴포넌트``` const setRemoveToNoteTags = useSetRecoilState(removeTagsSelector); const deleteTagHandler = (tag: Tag): void => { setTagsState({ type: "delete", tagsList: [tag] }); setRemoveToNoteTags(tag); }; ``` selector``` interface NotesList { mainNotes: Note[]; archiveNotes: Note[]; trashNotes: Note[]; editNote: null | Note; } const initialState: NotesList = { mainNotes: [...notes], archiveNotes: [], trashNotes: [], editNote: null, }; export const notesListState = atom({ key: "notesListState", // 고유한 키 default: initialState, // 초기 상태 }); export const removeTagsSelector = selector({ key: "removeTagsSelector", get: ({ get }) => {}, set: ({ get, set }, newValue: Tag) => { const notesList = get(notesListState); const removeTagFromNotes = (notes: Note[]) => { return notes.map((note) => { return { ...note, tags: note.tags.filter(({ tag }) => tag !== newValue.tag), }; }); ...... ```

개발자

#recoil

#react

#typescript

답변 0

댓글 0

조회 37

일 년 전 · 민경배 님의 답변 업데이트

리액트 내비게이션 초기 데이터값 설정

import React, { useEffect, useState } from "react"; import { Link, useLocation } from "react-router-dom"; import { TbArrowBigUpFilled } from "react-icons/tb"; import useScroll from "../utils/useScroll"; import useProductsQuery from "../useProductsQuery"; const Nav = () => { const { isNavFixed } = useScroll(); const [activeButton, setActiveButton] = useState(0); const handleButtonClick = (index) => { setActiveButton(index); }; const categoryNames = { materials: "소재별 품목", purposes: "용도별 품목", }; const [isScrollMenuVisible, setScrollMenuVisible] = useState(false); const handleMouseEnter = () => { setScrollMenuVisible(true); }; const handleMouseLeave = () => { // console.log("마우스 이탈"); setScrollMenuVisible(false); }; const location = useLocation(); const isloginorsignup = location.pathname === "/login" || location.pathname === "/signup"; const { isLoading, isError, errorMessage, materials, purposes } = useProductsQuery(); const [hoveredOnedepth, setHoveredOnedepth] = useState(null); const [onedepthChildren, setOnedepthChildren] = useState([]); const [hoveredDivision, setHoveredDivision] = useState(null); const [twodepthDivision, setTwodepthDivision] = useState([]); const handleOnedepthMouseEnter = (item) => { setHoveredOnedepth(item); // console.log(setHoveredOnedepth) setOnedepthChildren(item.children); }; const handletwodepthMouseEnter = (child) => { setHoveredDivision(child); // console.log(setTwodepthDivision); setTwodepthDivision(child.divisions); // console.log(child.divisions); }; if (isLoading) return <>로딩 중...</>; if (isError) return <>{errorMessage}</>; return ( <> {!isloginorsignup ? ( <> {/* 대메뉴 */} <nav id="nav" className={`nav ${isNavFixed ? "fixed" : ""}`}> <div className="nav_wrap"> <div className="twobutton_wrap"> {["materials", "purposes"].map((category, index) => ( <Link type="button" className={`twobutton ${ activeButton === index ? "active" : "" }`} key={index} onClick={() => handleButtonClick(index)} to={`/${category}`} > {categoryNames[category]} </Link> ))} </div> {/* 내비게이션 1depth */} <div className="scrollnav"> <ul className="materialnav" style={{ display: activeButton === 0 ? "flex" : "none", }} > {materials.map((material) => ( <li key={material.id} className="materialnav_li" onMouseEnter={() => { handleOnedepthMouseEnter(material); handleMouseEnter(); }} onMouseLeave={handleMouseLeave} > <Link to="/">{material.name}</Link> </li> ))} </ul> <ul className="usagenav" style={{ display: activeButton === 1 ? "flex" : "none", }} > {purposes.map((purpose) => ( <li key={purpose.id} className="usagenav_li" onMouseEnter={() => { handleOnedepthMouseEnter(purpose); handleMouseEnter(); }} onMouseLeave={handleMouseLeave} > <Link to="/">{purpose.name}</Link> </li> ))} </ul> </div> <div className="call_wrap"> <div className="call"> <div className="call_title">견적 상담 · 문의 대표전화</div> <div className="top_button"> <TbArrowBigUpFilled className="top_icon" /> <p>TOP</p> </div> </div> </div> </div> </nav> {/* 2&3depth 호버 메뉴 */} <div className={`scrollmenu ${isScrollMenuVisible ? "show" : ""} ${ isNavFixed ? "fixed" : "" }`} style={{ visibility: isScrollMenuVisible ? "visible" : "hidden" }} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} > {activeButton === 0 && ( <div className="scrollmenu_top"> <ul className="depth2_wrap"> {onedepthChildren.map((child) => ( <li key={child.id} className="depth2_menu" onMouseEnter={() => { handletwodepthMouseEnter(child); }} > <div className="depth2_menu_img_wrap"> <div className="depth2_menu_img"> <img src={child.images[0]._links.href} alt={child.name} /> </div> </div> <p>{child.name}</p> </li> ))} </ul> </div> )} <div className="scrollmenu_middle"> <div className="depth3_wrap"> {twodepthDivision.map((division) => ( <Link key={division.id} to="/" className="depth3_menu"> <span className="depth3_menu_img"> {/* images 속성이 없거나 비어 있어도 오류를 방지 */} {division.images && division.images.length > 0 && ( <img src={division.images[0]._links.href} alt={division.division_name} /> )} </span> <p>{division.division_name}</p> </Link> ))} </div> </div> <div className="scrollmenu_bottom"></div> </div> </> ) : null} </> ); }; export default Nav; 현재는 depth2_menu 호버해야만 depth3_menu가 보이는데 초기에 scrollmenu가 보일때부터 depth2_menu가 (onedepthChildren.map의 첫번째 순서의 데이터가) 호버되어있어 그에 매칭되는 division의 내용들이 depth3_menu에 보이게 할수있는 방법 있을까요 ?

개발자

#react

답변 1

댓글 0

조회 113

일 년 전 · 문승욱(카이론) 님의 새로운 답변

안드로이드 Activity의 EditText 값을 fragment의 커스텀 리스트뷰의 값으로 받아오는 과정에서 오류가 뭘까요?

Fragment로 커뮤니티 게시판을 만들고 있습니다 사진처럼 Activity에 작성한 글을 Fragment 안에 있는 커스텀 리스트뷰에 넣으려고합니다 구글링으로 방법을 찾아서 하고 있는데 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference at com.example.project.ChatFragment.onCreateView(String Title=bundle.getString("mainTitle",null);) 이렇게 오류 메세지가 뜨네요 어떻게 해결해야할지 모르겠습니다 엑티비티와 프래그먼트 코드 올립니다 혹시 몰라서 BaseAdater 코드도 올립니다

개발자

#java

#android

답변 1

댓글 0

조회 120

일 년 전 · 손우진 님의 새로운 답변

nextauth 를 이용해 springboot 의 jwt를 받아와서 로그인을 구현중입니다.

안녕하세요. nextauth 를 이용해 로그인 구현중입니다. 흔히 생각하는 소셜 로그인이 아닌 username 과 password를 통해 springboot security 에서 jwt를 반환 받아오려고 합니다. // app/api/auth/[...nextauth]/route.ts CredentialsProvider({ name: 'Credentials', credentials: { username: { label: 'Username', type: 'text', placeholder: '아이디' }, password: { label: 'Password', type: 'password' }, }, async authorize(credentials, req) { const res = await fetch(`${process.env.NEXTAUTH_URL}/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username: credentials?.username, password: credentials?.password, }), }); const user = await res.json(); console.log(user); if (user) { return user; } else { return null; } }, }), 그런데 위의 코드처럼 코드를 구성했을때 .env.local 파일의 NEXTAUTH_URL 이 등록이 되면 authorize 가 작동하지 않습니다 . 에러 log라도 있으면 어떻게라도 해보겠는데.. 그것도 없습니다. 그래서 NEXTAUTH_URL 를 등록하지 않고 const res = await fetch(`http://localhost:8080/auth`, 바꾸면 이것역시 에러 log 없이 브라우저상에서 Error 라는 문구만 보여줍니다. 이렇게 생각했을때 authorize는 값을 내부에서만 가져올수 있는거 같은데요. 실제로 가상의 const user = {....} 를 만들어서 반환하면 로그인이 아주 잘 됩니다. 하지만 제가 원하는 방법은 아니죠..ㅍ 검색해보면 prisma 가 많이 나오는데.. 그것 또한 시스템상 제가 원하는 방식이 아닙니다. springboot security 에서 jwt를 받아와서 nextauth에 로그인을 할수 있는 방법은 없을까요? custom login 페이지를 만들어서 해야 할거 같은데 방법을 잘 모르겠습니다. 현재 springboot 서버에 cors 설정이 정상적으로 허용된 상태입니다.

개발자

#nextauth

#springboot

#jwt

#nextjs

#typescript

답변 1

댓글 0

조회 1,206

일 년 전 · CGYOU 님의 새로운 답변

php 데이터형 질문

안녕하세요 php 공부하는데, 공백이 없는 빈문자열 ""은 Null(값이없음)이라고 하길래, $string = ""; var_dump($string); 으로 빈문자열 ""의 데이터형을 보는데, Null이 아니라 string(0) "" 으로 출력되네요. 제가 잘못이해 하고있는 것인가요? 왜 이런 결과가 출력되는지 궁금합니다.

개발자

#php

답변 2

댓글 0

조회 93

일 년 전 · joanne 님의 답변 업데이트

queryString에 관하여

http://test.com?auth=true&data={"endPoint":"/auth","data":"{"email":"test@test.com","name":"홍길동"}"} const query = queryString.parse(window.location.search); query 사용해서 data안에 객체로 되어있는 정보들 중 data안에 email 정보(test@test.com)을 뽑아오려면 어떻게해야하나요? const query = queryString.parse(window.location.search); console.log('query.data',query.data) //query.data까지는 뽑히는데 console.log('query.data.data', query.data.data) //undefined 그래서 const parsedData = JSON.parse(query?.data); //JSON형식 const email = parsedData.data.email; //test@test.com 정보가 뽑혔어요! 하지만 query?.data에서 에러가 납니다. **error 메세지 No overload matches this call. Overload 1 of 2, '(text: string, reviver?: ((this: any, key: string, value: any) => any) | undefined): unknown', gave the following error. Argument of type 'string | (string | null)[] | null' is not assignable to parameter of type 'string'. Type 'null' is not assignable to type 'string'. Overload 2 of 2, '(text: string, reviver?: ((this: any, key: string, value: any) => any) | undefined): any', gave the following error. Argument of type 'string | (string | null)[] | null' is not assignable to parameter of type 'string'. Type 'null' is not assignable to type 'string'. query?.data에서 위와 같은 에러가 납니다.. query?.data의 type은 JSON형식 아니고 string입니다. console.log(query?.data) // {"endpoint":"/auth","data":{"email":"test@test.com","name":"홍길동"}} string에서 email을 뽑아야할까요?.. JSON형식으로 가져올순 없을까요? 에러 원인 및 피드백 부탁드립니다.

개발자

#react

#json

#querystring

#parse

#stringify?

답변 2

댓글 0

조회 86

일 년 전 · 김도열 님의 새로운 댓글

nysql에서 외래키 참조

syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[CONSTRAINT fk_name] FOREIGN KEY(name) REFERENCES uesr_into(name) ON UPD' at line 5 CREATE TABLE a_check( id MEDIUMINT AUTO_INCREMENT PRIMARY KEY, name MEDIUMTEXT not null, age MEDIUMINT not null, [CONSTRAINT fk_name] FOREIGN KEY(name) REFERENCES uesr_into(name) ON UPDATA CASCADE ); 무슨 에러에요? 데이터가 있어야 한다는 걸까요?

개발자

#mysql

답변 1

댓글 1

보충이 필요해요 2

조회 56

일 년 전 · 김병수 님의 답변 업데이트

mysql에서의 외래키

CREATE TABLE a_check( id INT INTEGER AUTO_INCREMEnT PRIMART KEY, name MEDIUMBLO not null, age MEDIUMINT not null [CONSTRAINT CASCADE] FOREIGN KEY(name) REFERENCES uesr_into(name) ON UPDATA ) 여기에다가 age 의 외래키를 더 추가할건데 추가할 수있나요?

개발자

#mysql

답변 1

댓글 0

보충이 필요해요 1

조회 84

일 년 전 · 김도열 님의 새로운 답변

mysql에서 값을 제한할 수 있나요

CREATE TABLE uesr_into( id SMALLINT AUTO_INCREMENT PRIMARY KEY, name MEDIUMTEXT NOT NULL, sex ENUM('M' ,'F') NOT NULL, job MEDIUMTEXT age MEDIUMINT NOT NULL if(age>20 AND age<100, NOT NULL, '입소가 불가능 합니다.') ); if문에서 값을 못게 할 수 없나요?

개발자

#mysql

답변 1

댓글 0

조회 69

2년 전 · 장성호 님의 새로운 답변

mysql 관련오류

0 8 09:46:09 create table week( name varchar(30) not null,-- 일정 이름 start_time time default '10:00:00',-- 시작 시간 end_time time default '16:00:00',-- 끝나는 시간 number tinyint auto_increment primary key, check (start_time<end_time) ) Error Code: 1050. Table 'week' already exists 0.000 sec

개발자

#mysql

답변 1

댓글 0

조회 133

2년 전 · 익명 님의 질문

mysql 오류가 있어요?

create table week( name varchar(30) not null,-- 일정 이름 start_time time default '10:00:00',-- 시작 시간 end_time time default '16:00:00',-- 끝나는 시간 number tinyint auto_increment primary key check (start_time<end_time) 0 7 09:43:20 create table week( Error Code: 3813. Column check constraint 'week_chk_1' references other column. 0.000 sec

개발자

#mysql

답변 0

댓글 0

보충이 필요해요 1

조회 74