안녕하세요. 본 강의에서 보여주신 회원가입 버튼 비활성화 로직은 다음과 같습니다. useEffect(() => { const isEnabled = Object.values(inputs).every((s) => s.length > 0); setFormDisabled(!isEnabled); }, [inputs]); 위의 코드로 실행하면 username과 password를 모두 입력하면 회원가입 버튼이 활성화되고 하나라도 지우면 다시 비활성화 됩니다. useEffect(() => { if (inputs.username && inputs.password) { setFormDisabled(false); } }, [inputs]); 그러나 조금 수정하여(이외의 부분은 모두 동일) 위와 같이 실행해보면, 본래의 코드와 마찬가지로 모두 입력되었을 때 버튼이 활성화 되지만 다시 지워도 비활성화가 되지 않습니다. 두 곳 모두 지워봐도 마찬가지입니다. console.log로 찍어보아도 false 값으로 고정된 채 바뀌지 않습니다. useEffect가 비동기 방식이므로 formDisabled가 업데이트 되는 타이밍 문제도 고려해 보았지만, 그렇다면 본래의 코드에서도 이런 문제가 발생하여야 할 것이라고 판단했습니다. 여러모로 분석해 보았지만 이유를 알기가 어렵습니다.
안녕하세요. 강의 수강 중 궁금한 점이 있어서 질문드립니다! TCP 에코 서비스 전체 흐름 수업 중에 서버에서 bind 함수가 필요한 이유를 듣고 문득 궁금해졌습니다. bind 함수가 소켓이라는 추상적인 객체에 TCP 프로토콜을 붙여서 구체화를 시켜주는 함수로 이해했습니다. 그렇다면, 클라이언트도 bind라는 함수가 필요하지 않나 생각이 들었습니다. 서버와 통신을 한다면 결국 클라이언트도 IP와 port 정보가 필요하다고 생각하는데 왜 클라이언트는 따로 bind 함수를 호출하지 않는지 궁금합니다!
Jupyter command jupyter-contrib not found. 지금 이 오류가 떠서 설치가 안되고 있는데요. 어떻게 해결해야 할까요?? 제가 봤을땐, pip install jupyter_contrib_nbextensions 이 부분은 실행이 되는데 jupyter contrib nbextension 이 부분에서 오류가 생기는 것 같습니다. ㅠㅠ
한국인 머리 아프게 만드는 영어의 특징의 14:03초에 Ask for의 예제가 Ask for the manager for confirmation. 으로 나오는데 Ask the manager for confirmation.으로 되어야 하는 거 아닌가 해서요. 강의 재밌네요. 잘 듣고 있습니다.
1. 사용자에게 로또번호 받기(form태그로 구현) 2. checkInput을 통해 입력값 통제 1. 2 자릿수까지만 입력 2. 숫자만 입력 3. 이미 입력한 숫자는 재사용 불가 4. 빈 값 입력 불가 3. 사용자 입력이 끝나면 classList를 통해 form 부분을 사라지게 만들었습니다. 4. 사용자 입력번호와 랜덤으로 추출한 번호가 일치하는지 구현 1. winningLottoNumber(보너스 번호를 제외하고 일치하는 번호가 있는지) 변수를 통해 카운트 2. winningLottoBonusNumber(보너스 번호) 변수를 통해 카운트 => 여기서 includes를 써도 카운트가 안됐습니다. 찾아본 결과 includes는 형까지 똑같아야 true로 나와서 형 변환 후 검증했습니다. 5. 랜덤 로또 번호가 다 나온 후 결과가 나오게 setTimout을 9초로 설정했습니다! 혹시나 이상한 부분이나 고쳐야 할 부분이 있는지 문의 드립니다 ㅠㅠ 코드가 길어서 깃허브 주소 첨부 했습니다~! 감사합니다. https://github.com/diderot7/JS-PRACTICE/blob/main/lotto.html
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. "클래스가 필요한 이유" 강의중 코드작성때는 int[] studentGrade = {} 로 작성하셨는데 pdf 파일에는 int[] studentGrades ={} 로 작성 되어 있습니다..!
안녕하세요:) 질문이 있어서 찾아왔습니다 ㅠㅠ... 타입스크립트로 리액트 프로젝트를 할 떄 로컬스토리지를 사용할 경우 문제가 발생하여 질문드립니다. 아래코드는 유저와 컴퓨터의 점수를 담고 있는 State입니다. 이 State의 초기값은 로컬스토지리에서 가지고 올 수 있는 값이 없다면 userScore과 computerScore에 숫자 0을 초기값으로 부여하고, 가지고 올 수 있는 값이 있다면 로컬스토리지에서 가지고 옵니다. const [score, setScore] = useState<{ userScore: number; computerScore: number; }>( !JSON.parse(localStorage.getItem("score")) ? { userScore: 0, computerScore: 0, } : JSON.parse(localStorage.getItem("score")) ); 오류 발생... 아래 코드 부분에서 string | null 형식의 인수는 'string' 형식의 매개 변수에 할당될 수 없습니다. 라는 오류가 발생합니다. localStorage.getItem("score") getItem 을 ctrl + 클릭하여 코드를 들어가 본 결과 반환값? 을 string | null 유니온 타입 을 가지고 있습니다. getItem(key: string): string | null; json.parse에서 parse 부분을 ctrl + 클릭하여 코드를 들어가 본 결과 parse에 key값은 string만 받을 수 있게 되어 있습니다. parse(text: string, reviver?: (this: any, key: string, value: any) => any): any; 제 개인적인 의견은 getItem의 반환값 타입이 string | null 이지만 parse에서 key값은 string만 가능하기 때문에 문제가 발생하는 것 같습니다. 이 오류를 하루동안 계속 찾아봤는데 정보가 너무 부족했습니다. 그나마 사람들이 말씀하시는 답변의 코드는 JSON.parse(localStorage.getItem("score") || "{}") 이렇게 하라고 하셨는데 저 코드를 넣어버리니 로컬스토리지에 value값에 처음으로 담기는 값은 {} 이거였습니다... 그래서 저는 다르게 생각해서 `` 와 ${} 이거를 사용하기로 했습니다. 이것도 결국 문자열이라고 배웠기 때문입니다. let str = `${}` 그래서 최종적으로 나온 코드는 아래 코드처럼 바꾸는 거였습니다. 문제 없이 돌아가기는한데 이렇게 써도되는지 의문이 드네요... 혹시 다른 방법이 있을지 궁금합니다. JSON.parse(`${localStorage.getItem("score")}`)
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 이전 강의에서도 webapp에 넣어도 인식을 못해서 질문게시판을 봐도 해결이 안되서 static에 index.html을 넣어서 진행했는데 요번에 new-form.jsp(강의 3분 부분) 또한 static에 넣으면 되겠지 하고 했는데 안되서 webapp을 따로 만들어봐도 안되서 질문드립니다. https://drive.google.com/file/d/1vj5qb3pyqOGxxT2YTs2VrKI397SIARdv/view?usp=sharing 에러코드 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sat Dec 30 17:50:52 KST 2023 There was an unexpected error (type=Not Found, status=404). ------------------------------------------------------
UUID, Random 등 자주 사용하는 의존성의 경우, 강의에서 설명해주신 방식으로 공통으로 사용하는 유틸성 Holder 인터페이스를 만들어놓고 프로젝트에서 함께 사용하는 방식으로 개발하나요? 자주 사용되는 클래스들이다 보니 여러 곳에서 필요할 것 같은데(한 곳에서 Holder 인터페이스를 만들어두면 될 것 같은데) 실제로는 어떻게 사용하시는지 궁금해서 여쭙습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 일단 오류 로그는 이러한데 이 autowired를 통해 주입 받는 과정에서 @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } 이 수동 빈의 등록과 @Component public class MemoryMemberRepository implements MemberRepository{ private static Map<Long, Member> store = new HashMap<>(); @Override public void save(Member member) { store.put(member.getId(),member); } @Override public Member findById(Long memberId) { return store.get(memberId); } } 이 자동 빈의 등록이 중복이 되어 MemberRepository의 빈을 조회하여 주입할 때 2개의 빈 중복으로 해당 오류가 발생하는 것으로 이해하였는데 gpt의 의견으로 @primary를 사용하면 해결이 되는걸 확인을 했습니다만 처음에 타입으로 조회 한 이후에 여러 개의 빈이 조회 된다면 memberRepository의 이름인 빈이 선택되어 오류가 나지 않아야 하는 것이 아닌가 하여 이해가 되지 않아 질문 드립니다. 감사합니다.
해당 강의에서 예로 들어주신 부분 코드를 가져와 보면 async function getData() { let rawResponse = await fetch("https://jsonplaceholder.typicode.com/posts"); let jsonResponse = await rawResponse.json(); console.log(jsonResponse); } getData(); 위 코드를 예로 들어 주셨는데요 여기서 질문이 있는데 async 내부에서 await은 비동기를 동기적으로 실행하게 하는 거라고 해주셨는데요 그러면 위 코드에서 async await 자체를 쓸 필요가 없는거 아닌가 하는 궁금증이 들었는데요 혹시 말씀해주신 '비동기를 동기적으로 실행하게 한다' 라는게 해당 함수 내부에서만을 말씀해주신 걸까요?? 제가 이해한게 맞나 확인 부탁드립니다. 코드를 실행 하면 차례대로 한줄씩 실행된다. getDate함수를 호출하는 코드가 실행되면 코드의 실행 순서는 getDate함수로 이동한다. getDate함수 내부의 await을 만나면 거기서 getDate함수의 실행은 멈춘다. getDate함수의 await 작업이 끝날 때까지 getDate함수는 실행을 멈추고 실행은 다시 전체 코드에서 getDate함수를 호출한 부분 이후의 코드가 실행된다. await 작업이 끝나면 실행은 다시 getDate함수 내부의 await 이후 코드가 실행되고 getDate 함수의 실행이 끝나면 다시 실행은 이전까지 실행했던 부분이후로 넘어간다 라고 이해 했는데요... 이게 맞을까요?? 아! 그리고 비동기 함수가 넘어가는 부분도 자바스크립트 처럼 싱글쓰레드라 비동기 함수들을 하나씩 처리하나요?? 아니면 비동기 작업을 처리하는 부분은 멀티쓰레드 형식이라 동시에 비동기작업을 처리하는것이 가능한가요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 지금 많이 바뀌었는데 프로젝트 부분을 어떻게 선택해야할까요? 버전은 3.2.1로 해도되나요? 해당 내용들을 공지해주신 곳이 있나요?