묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결만들면서 배우는 리액트 : 기초
https://cataas.com/undefined 로 나오는데 왜그런건가요?
https://cataas.com/undefined 로 나오는데 왜그런건가요?28강 수강하고 있는데 fetch를 사용하려고 하는데 이미지가 안나와요 ㅠㅠㅠ
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
해당 강의 코드에서 16-17번째 줄 코드 질문
안녕하세요 강의 듣다가 궁금한점이 있어서 질문 드립니다..!해당 강의 16분 37초 기준으로 16-17번째 줄 코드를 보면if(j!==i && (product[j][0]+product[j][1])>money) break; if(j!==i && (product[j][0]+product[j][1])<=money){이렇게 적으셨는데 break 하는 부분에 꼭 굳이 j!==i 도 적어야하나요 ??저의 경우function solution(bud, product) { let answer = 0, total = product.flat().reduce((prev, curr) => prev + curr); product.sort((a, b) => a[0] + a[1] - (b[0] + b[1])); for (let i = 0; i < product.length; i++) { // 50% 할인 쿠폰 적용할 상품 for 문 돌리기 let money = bud - (product[i][0] / 2 + product[i][1]); // 사용 가능한 금액 let cnt = 1; // 할인받은 애는 되니까 1 시작 for (let j = 0; j < product.length; j++) { if (i === j) continue; if (money < product[j][0] + product[j][1]) break; money -= product[j][0] + product[j][1]; cnt++; } answer = Math.max(answer, cnt); } return answer; }이렇게 i===j 를 만나면 continue 로 하고 예산이 넘어갈때만 break 두돌록 했는데 이렇게 잓성해도 괜찮을까요 ?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
10-08 product.service.ts에 final(), findOne에
productTags는 왜 relations에 넣지 않는건가요? 자동으로 되는건가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
playground 관련 질문드립니다.
안녕하세요.GraphQL로 서버를 개발하면, 프론트 개발자는 Playground를 보고 API 사양을 확인하게 될 것 같은데요..!받아올 수 없는 값을 Playground에서 미리 알려줄 수 있는 방법이 없는지 궁금합니다.예를 들어, 아래와 같이 createProduct를 할 때, productTags나 productCategory는 name을 받으려 하면 에러가 발생하잖아요.근데, Playground의 DOCS에는 name 타입도 받아올 수 있는 것처럼 확인이 되는데, 오류를 받아보기 전에 해당 값은 받아올 수 없는 값이라는 걸 알려줄 수 있는 방법이 있을까요..?
-
미해결<M.B.I.T> 테스트 페이지 만들기! with Django
첫화면 버튼이 css 적용이 안됩니다..
.buttons button { width: 300px; height: 50px; padding: 5px; border-style: none; border-radius: 10px; font-family: "NEXON Lv1 Gothic OTF"; font-size: 20px; font-weight: bold; cursor: pointer; background-color: #fff; color: #7F47DD; margin-bottom: 20px; }로 코드 올려주신 것 그대로 했는데도 아래 사진처럼 기본 버튼으로 됩니다..다른 css 디자인은 잘 적용이 됩니다.뭐가 문제일까요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
State 문제
useState(0) 에서 결과값을 볼려고 했는데 0이 안떠서 값을 못보겠습니다. 코드에 문제가 있는걸까요?
-
해결됨React + GPT API로 AI회고록 서비스 개발 (원데이 클래스)
프롬프트 명령어 - 입력값과 동일한 언어로 받으려면 어떻게 작성할까요?
좋은 내용 감사합니다.프롬프트 내용중에 "Translate Into Korean~" 이라는 내용으로 답변을 한글로 받게 됩니다.혹시 [events] 밑에 오는 사용자 입력값과 동일한 언어로 결과를 받고 싶다면 어떻게 작성하면 될까요?강의 내용을 기준으로 다국어 서비스를 만들려고 하는데, 영어가 짧아서 질문 드려요
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 풀이
강의 보기전에 혼자 풀어보았는데 저의 경우에는 미리 순위를 추출해서 result ㄹ라는 변수에 저장한뒤 for문을 돌려서 result 에 있는 순위를 비교해서 답을 내도록 했는데 혹시 틀렸거나 비효율적이라면 어떤 점이 문제인지 알려주시면 감사하겠습니다..!function solution(test) { let a = test.length, b = test[0].length; let result = Array.from({ length: b + 1 }, () => []); // [[], [], [], [], []] let answer = 0; for (let x of test) { // [3,4,1,2] for (let i = 0; i < b; i++) { result[x[i]].push(i + 1); } } for (let i = 1; i < b + 1; i++) { // 0~4 for (let j = 1; j < b + 1; j++) { // result[i] 랑 result[j] 비교 if (i === j) continue; let isMento = true; for (let n = 0; n < a; n++) { if (result[i][n] <= result[j][n]) { isMento = false; break; } } isMento && answer++; } } return answer; } let arr = [ [3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2], ]; console.log(solution(arr));
-
해결됨실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
act 함수와 renderHook 함수 내 rerender 차
안녕하세요 궁금한게 있습니다. act 함수에 대해 이해했는데 act 함수없이 아래와 같이 해도 테스트가 통과되더라구요. 혹시 차이가 있을까요?it('훅의 toggleIsModalOpened()를 호출하면 isModalOpened 상태가 toggle된다.', () => { const { result, rerender } = renderHook(useConfirmModal); result.current.toggleIsModalOpened(); rerender(); expect(result.current.isModalOpened).toBe(true); });
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
react에서 코드 작성하실때 태그 작성하시는것 질문 있습니다.
리액트 강의에서 코드 작성하실 때input이나 button 같은 태그를 작성하실 때한 태그만 작성하실 때에도 굳이 div태그를 만들어서 그 안에 작성하시던데 그 이유가 있을까요??JSX문법에서 전체 태그를 하나의 부모 태그로 감싸야 하는 것은 알고 있지만 왜 태그 하나 하나를 다 div태그로 감싸는지 궁금합니다
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
따로 function 빼기
제가 강의 듣기 전function solution(num) { let answer = []; for (let x of num) { let isPrime = true; x = Number(x.toString().split("").reverse().join("")); if (x <= 1) continue; for (let i = 2; i <= x / 2; i++) { if (x % i === 0) { isPrime = false; break; } } isPrime && answer.push(x); } return answer; } let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100]; console.log(solution(arr)); 이런식을로 풀었는데영상에 보니까 isPrime(n) 을 따로 빼서 하신것같은데이렇게 함수를 따로 빼야하는 이유가 있는건가요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
질문
제가 영상 보기 전 혼자 풀어보았는데function solution(n, arr) { let answer = 0, max_sum = 0; for (let x of arr) { let sum = 0, temp = x; while (temp) { sum += temp % 10; temp = Math.floor(temp / 10); } if (max_sum < sum || (max_sum === sum && answer < x)) { answer = x; max_sum = sum; } } return answer; } let arr = [128, 460, 603, 40, 521, 137, 123]; console.log(solution(7, arr)); 저는 if 문을 (max_sum < sum || (max_sum === sum && answer < x)) 이렇게 하나로 묶어서 썼는데 괜찮을까요 ? 그리고 선생님께서 max를 초기화할때 Number.MIN_SAFE_INTEGER 로 하셨는데 어차피 각자리수의 합이 0보다는 클것이라는 생각이 들어서 저의 경우엔 0으로 초기화 했는데 괜찮을까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
for 문을 1부터 마지막 인덱스까지
안녕하세요 제가 강의 보기전에 혼자 풀어봤는데function solution(s) { let answer = s[0]; let cnt = 1; for (let i = 1; i < s.length; i++) { if (s[i] === s[i - 1]) { cnt++; continue; } if (cnt > 1) { answer += cnt + s[i]; cnt = 1; } else { answer += s[i]; } } return answer; } let str = "KKHSSSSSSSE"; console.log(solution(str)); 저 같은 경우 미리 answer 에 첫번째 글자를 넣어서 시작했고for 문을 1부터 시작해서 그 전의 값과 비교하는 식으로했는데 이렇게 풀어도되는걸까요?
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
import 시 뜨는 에러 (타입스크립트 파일에서만 사용할 수 있습니다.)
안녕하세요! 강의 잘 보고 있습니다 ㅎㅎ다름이 아니라, import * as getters from './getters' 를 했는데 'import ... ='는 TypeScript 파일에서만 사용할 수 있습니다. ts(8002)라며 에러가 나네요 ㅠㅠ저는 뷰 3를 이용하고 있습니다!
-
해결됨[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
틱택토 코드에서 ESLint Warning
안녕하세요 제로초님틱택토 2강 중에 클릭 이벤트 부분 진행 중 질문 드립니다저는 https://playcode.io/ 라는 온라인 에디터에서 공부 중인데요 여기 환경에서 ESLint Warning 이 떠서 문의드립니다.const elemTable = document.createElement('table'); let turn = 'O'; for (let i = 0; i < 3; i++) { const elemTr = document.createElement('tr'); for (let i = 0; i < 3; i++) { const elemTd = document.createElement('td'); elemTd.addEventListener('click', (e) => { // ESLint Warning if (e.currentTarget.textContent) return; // ESLint Warning e.currentTarget.textContent = turn; // ESLint Warning turn === 'O' ? turn = 'X' : turn = 'O'; // ESLint Warning }) // ESLint Warning elemTr.insertAdjacentElement('beforeend', elemTd); } elemTable.insertAdjacentElement('beforeend', elemTr); } document.body.insertAdjacentElement('afterbegin', elemTable);'Function declared in a loop contains unsafe references to variable' -> 루프에서 선언된 함수에 변수에 대한 안전하지 않은 참조가 포함된다.라는 내용이라고 하는데 위 내용을 구글링 해보면 반복분 for에서 var 대신 let은 쓰면 해결된다는 내용뿐이라(이미 let 사용중) 어떤 부분이 원인인지 잘 모르겠어서요. 코드는 잘 실행됩니다저는 삼항연산자를 썼지만 강의 내용대로 if문을 써도 동일한 ESLint Warning이 나오고 있습니다.배포된 페이지도 공유드립니다.https://1710512.playcode.io/
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
파이프 관련 질문있습니다.
위 예제에서 value의 타입이 string 혹은 number가 아니라 any인 이유가 궁금합니당..
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
jetbrain에서 디버거 사용
안녕하세요, 젯브레인 사용중이라 혹시 도움될까싶어 글 남겨요.버전에 따라 조금씩 다를지 모르겟는데, 우측 상단에Current File > Edit Configurations... 클릭 Run/Debug Configurations 화면에서+ 또는 Add new... 클릭NodeJS 선택 후 Name은 Debug로 입력 그리고 아래 Configuration 탭에서 Node Parameters: node_modules/@nestjs/cli/bin/nest.js start --debug --watchJavascript File: src/main.ts그리고 Apply, OK 로 설정 완료 후 처음 Current File 부분이 Debug로 변경되어있는것 확인 후, 우측 실행버튼 클릭그러면 하단에 실행 화면이 나오는데, 스크롤 위로 올려보면 ws://127.0.0.1:..../aaaa-bbbb-cccc-dddd 링크 클릭 > Threads & Variables 탭 누르면나머진 강의하고 똑같이 나오니 강의 설명으로 참고하시면 돼요
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
코드 질문드립니다.
import "./App.css"; import { BrowserRouter, Route, Routes } from "react-router-dom"; import Board from "./common/Board"; import Login from "./component/Login"; import { useEffect } from "react"; function App() { useEffect(() => console.log("app is loading"), []); return ( <BrowserRouter> <Routes> <Route path="/login" element={<Login />}></Route> <Route path="/board/:boardId/page/:page" element={<Board />}></Route> <Route path="/board/:boardId/new" element={<Board />}></Route> <Route path="/board/:boardId/post/:postId" element={<Board />}></Route> <Route path="/board/:boardId/post/:postId/edit" element={<Board />} ></Route> </Routes> </BrowserRouter> ); } export default App; import React, { useEffect, useState, useContext } from "react"; import { useNavigate, useParams } from "react-router-dom"; // useParams를 import import BoardList from "../component/BoardList"; import BoardEdit from "../component/BoardEdit"; import BoardView from "../component/BoardView"; import Layout from "../layout/Layout"; import axios from "axios"; import { TokenProcess } from "../common/TokenProcess"; export const BbsSettingContext = React.createContext(); const Board = () => { const { boardId, postId, page } = useParams(); // const [currentUrl, setCurrentUrl] = useState(null); const [boardSettData, setBoardSettData] = useState(null); const navigate = useNavigate(); useEffect(() => { console.log("board:::::::::::::::::"); const fetchData = async () => { const access_token = localStorage.getItem("Authorization"); try { const response = await axios.get( `http://localhost:8080/api/board/${boardId}`, { headers: { Authorization: `Bearer ${access_token}`, }, } ); setBoardSettData(response.data.returnData.board); let mode = ""; if ( window.location.pathname.split("/")[3] == "page" && window.location.pathname.split("/")[5] == null ) { mode = "page"; } else if ( window.location.pathname.split("/")[3] == "post" && window.location.pathname.split("/")[5] == null ) { mode = "view"; } else if (window.location.pathname.split("/")[5] == "new") { mode = "new"; } else if (window.location.pathname.split("/")[5] == "edit") { mode = "edit"; } else { mode = ""; } setCurrentUrl(mode); console.log("모드" + mode); } catch (error) { console.log(error); if ( error.response.status == 401 && error.response.data.data == "EXPIRE_TOKEN" ) { (await TokenProcess()) ? fetchData() : navigate("/login"); } else { console.log(error); return false; } } }; fetchData(); }, [window.location.pathname]); return ( <BbsSettingContext.Provider value={boardSettData}> {currentUrl == "page" ? ( <Layout> <BoardList boardId={boardId} page={page} /> </Layout> ) : currentUrl == "new" ? ( <Layout> <BoardEdit /> </Layout> ) : currentUrl == "edit" ? ( <Layout> <BoardEdit boardId={boardId} postId={postId} /> </Layout> ) : currentUrl == "view" ? ( <Layout> <BoardView boardId={boardId} postId={postId} /> </Layout> ) : null} </BbsSettingContext.Provider> ); }; export default Board; 아래는 상세 보기입니다.import React, { useState, useEffect, useContext, useRef } from "react"; import { useNavigate } from "react-router-dom"; import axios from "axios"; import { BbsSettingContext } from "../common/Board"; import ToastEditor from "../component/ToastEditor"; import MyButton from "../common/ComButton"; import { TokenProcess } from "../common/TokenProcess"; const BoardView = ({ postId }) => { const titleInputRef = useRef(); const contentsAreaRef = useRef(); const toastEditorRef = useRef(); // ToastEditor의 ref const navigate = useNavigate(); const [post, setPost] = useState({ postId: "", postTitle: "", postContent: "", regDate: "", }); const [boardSetting, setBoardSetting] = useState(null); const boardSetData = useContext(BbsSettingContext); const Navigate = useNavigate(); const formatDate = (timestamp) => { const date = new Date(timestamp); const options = { year: "numeric", month: "long", day: "numeric" }; return date.toLocaleDateString("ko-KR", options); }; useEffect(() => { console.log("view>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); if (boardSetData) { setBoardSetting(boardSetData); const access_token = localStorage.getItem("Authorization"); const fetchData = async () => { try { const response = await axios.get( `http://localhost:8080/api/board/${boardSetData.boardId}/post/${postId}`, { headers: { Authorization: `Bearer ${access_token}`, }, } ); console.log(response.data.returnData); setPost({ postId: response.data.returnData.postId, postTitle: response.data.returnData.postTitle, postContent: response.data.returnData.postContent, regDate: response.data.returnData.regDate, }); } catch (error) { console.log(error); if ( error.response.status == 401 && error.response.data.data == "EXPIRE_TOKEN" ) { (await TokenProcess()) ? fetchData() : navigate("/login"); } else { console.log(error); return false; } } }; fetchData(); } }, [boardSetData, postId]); const editBoard = async () => { navigate(`/board/${boardSetting.boardId}/post/${postId}/edit`); }; return ( <div className="BoardView"> <div className="upInfoArea"> <div type="text" name="boardTitle" className="titleDiv"> {post.postTitle} </div> <div type="text" name="regId" className="regIdDIv"> {formatDate(post.regDate)} </div> </div> <div className="contentArea"> <div className="contentsText">{post.postContent}</div> </div> <section> <div className="btnArea"> <MyButton text={"리스트이동"} onClick={() => Navigate(-1)} /> <MyButton text={"수정하기"} type="positive" onClick={editBoard} /> </div> </section> </div> ); }; export default BoardView; 리스트이동이라는 버튼을 누르면 바로 이동을 하는데브라우저에서 <- 뒤로가기 버튼을 누르면 갑자기 BoardView의 useEffect를 타는데 이유를 모르겠습니다 .어떻게 해야될까요. ..
-
미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
setTimeout 함수 관련해 질문이 있습니다.
const showBall = (number, $target) => { const $ball = document.createElement('div'); $ball.className = 'ball'; $ball.textContent = number; $target.appendChild($ball); }; for (let i = 0; i < 6; i++) { setTimeout(() => { showBall(winBalls[i], $result); }, 1000 * (i + 1)); } setTimeout(() => { showBall(bonus, $bonus); }, 7000);
-
미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
로또 랜덤게임을 만들었는데 피드백 부탁드립니다 ㅠㅠ
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