묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
권한요청드립니다!
권한 요청 드립니다.인프런 아이디 : koorihime@naver.com인프런 이메일 : koorihime@naver.com깃헙 아이디 : koorihime@naver.com깃헙 Username : minhyuck woo
-
해결됨실전 프로젝트로 배우는 타입스크립트
강의 내용 질문입니다.
강의에서는type updateProduct = Partial<Product>에서 updateProduct의 모든 속성들이 아래 처럼 옵셔널이 된다고 말씀하셨는데id?: number;현재는 타입스크립트 버전이 달라서 그런지단순히 옵셔널이 되는게 아니라 undefined도 될 수 있다고 나옵니다.id?: number | undefined;따라서 함수에서 만약 brand 속성을 가져온다면//강의 내용 productItem.brand.length //현재 버전 productItem.brand?.length이렇게 undefined가 아닐 때만 가져오도록 변경되어 있는데 조금 헷갈리는 개념은 Partial 유틸리티를 사용함으로 써 Product의 모든 속성을 옵셔널로 바꾼다 이지만 여기서 왜 undefined가 될 수 있는지 이해가 안됩니다.모든 속성을 옵셔널로 가져오기 때문에 가져오는 속성은 undefined가 될 수 없는게 아닌가요? 추가적으로, lib.es5.d.ts 파일에서는 강의 내용과 같지만Partial에 마우스 커서를 올렸을 때 나오는 결과는 다릅니다.
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃허브 권한 부탁드립니다.
인프런 아이디: jhpark@nicednr.co.kr인프런 이메일: jhpark@nicednr.co.kr깃헙 아이디: leehot2665@naver.com깃헙 Username: Zero-Human
-
미해결프로젝트로 배우는 React.js
36 블로그 db에서 받아와서 화면에 보여주기 에서
const[post,setPost]=useState([]); null이아니라 []을넣으니 잘 되네요
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 권한 요청드립니다
인프런 아이디: gil인프런 이메일: gil@projectlien.co.kr깃헙 아이디: gilha.leee@gmail.com깃헙 Username: gilhalee깃헙 권한 요청 부탁드립니다
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 권한 재요청 드립니다.!!
깃헙 권한 재요청 드립니다! 인프런 아이디 : jungsr417@hanwha.com인프런 이메일 : jungsr417@hanwha.com깃헙 아이디 : jungsr417깃헙 Username : jsr 감사합니다.
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
토글 부분에서 리팩토링이 되지 않아 질문드립니다.
저는 getTime() 으로 타임을 받아서 value 부분을 객체로 만들어서 넘기고 있었습니다.store에서 sort 기능을 추가하였고완료된건을 아래로 넘기는 작업을하고 완료되지않은 건은 위로 올려서 나뉘게 작업하였습니다.그런대 이전에 store을 쓰지않을때는 단순하게 토글할때 sort를 함수로 만들어서 호출하였더니 잘되었습니다.store에 함수로 만들고 호출하고 나서는 리팩토링이 되지 않습니다 ㅠㅠ새로고침했을때는 잘 작동합니다. 또한 console창에도 바뀐 로직으로 잘 뜹니다.toggleOneItem 부분 봐주시면 감사합니다fetch부분에서는 잘되어서 리스트 가져올땐 잘되었는대 ㅠㅠ 토글하면서 잘 안돼더라구요!제가 어떤것을 실수 했을까요..? import Vue from "vue"; import Vuex from "vuex"; Vue.use(Vuex); //글로벌하게 Vuex를 쓰겠다는 의미 //해당 라이브러리를 사용하기 위한 초기화 코드를 실행하는 구문 //뷰에 연결해야 vuex를 사용할 수 있다 let sortItem = []; function sortlist(state) { const trueItem = state.filter( (item) => item.completed === true ); const falseItem = state.filter( (item) => item.completed === false ); trueItem.sort(function (a, b) { return b.value.time - a.value.time; //내림차순 }); falseItem.sort(function (a, b) { return b.value.time - a.value.time; //내림차순 }); sortItem = [...falseItem, ...trueItem]; return sortItem; } const storage = { fetch() { //네트워크의 리소스를 쉽게 비동기적으로 가져오기 //app에 있는 created를 store에 붙이기 let arr = []; if (localStorage.length > 0) { for (let i = 0; i < localStorage.length; i++) { if (localStorage.key(i) !== "loglevel:webpack-dev-server") { const item = localStorage.getItem(localStorage.key(i)); arr.push(JSON.parse(item)); //arr배열을 만들어서 푸시해주기 sortlist(arr); } } } return sortItem; // {} 단위밖에서는 arr을 호출할 수 없으므로 return 반환 }, }; // //다른 컴포넌트에서 this.$store 로 사용할 수 있음 export const store = new Vuex.Store({ state: { headText: "TODO it!", //헤더에 들어갈 값 등록하기 //todoItems: [], todoItems: storage.fetch(), //위에 만들어준 값을 넣어준다 }, getters: { getTotalNum(state) { //인자는 state return state.todoItems.length; }, getTrueNum(state) { //인자는 state const trueItem = state.todoItems.filter( (item) => item.completed === true ); return trueItem.length; }, }, mutations:{ addOneItem(state, value) { //console.log(value) const obj = { completed: false, value: value }; //const를 쓰면 재선언할 수 없어 디버깅할 때 충돌을 줄일 수 있음 //오브젝트로 만들어줬기 때문에 obj를 찍게 되면 object object가 찍힘, 따라서 문자열로 변환해 주는것 localStorage.setItem(value.item, JSON.stringify(obj)); //JavaScript 값이나 객체를 JSON 문자열로 변환 if(!state.todoItems.some(element => element.value.item == value.item)){ state.todoItems.unshift(obj); }else{ alert('이미 작성된 내용입니다.'); } }, removeOneItem(state, payload) { //console.log(payload); localStorage.removeItem(payload.todoItem.value.item); //객체일때 로컬스트리지에서 삭제하기 state.todoItems.splice(payload.index, 1); //현재 리스트에서 삭제하기 }, toggleOneItem(state, payload) { //todoItem.completed = !todoItem.completed; //이벤트로 넘어온값을 바꾸는 것을 안티패턴이라고 하며 어짜피 props로 내려준 값이 변경되므로 아래와같이 변경한것 state.todoItems[payload.index].completed = !state.todoItems[payload.index].completed; //localStorage 갱신하기 localStorage.removeItem(payload.todoItem.value.item); //localStorage는 업데이트 기능이 없으므로 삭제 후 localStorage.setItem(payload.todoItem.value.item, JSON.stringify(payload.todoItem)); //새로 추가해준다, 이때 completed 값이 바꼈으므로 바뀐값이 들어오게 된다. sortlist(state.todoItems); //리팩토링이안돼네...추후에 해결할것 ㅠㅠ }, clearAllItems(state) { localStorage.clear(); state.todoItems = []; }, }, });
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 권한 요청드립니다!!
인프런 아이디 : seajin97@g.shingu.ac.kr인프런 이메일 : seajin97@g.shingu.ac.kr깃헙 아이디 : seajin97@g.shingu.ac.kr깃헙 Username : simsimhang
-
미해결자바스크립트 제대로 배워볼래?
선생님 안녕하세요. array내장함수 수업듣는중 이해가 안되는 부분이있어서 질문드립니다.
선생님 안녕하세요. array내장함수 수업듣는중 이해가 안되는 부분이있어서 질문드립니다.var person = [ {name:"유재석", point:78}, {name:"김종국", point:92}, {name:"양세찬", point:76}, {name:"하하", point:81}, ]; person.sort(function(a,b){ if(a.point > b.point){ return -1; } else if (a.point < b.point) { return 1; } else { return 0; } }); console.log(person); 변수안에 객채를 생성하고 sort안에 함수선언해서 조건문 넣는부분까지는 이해가 되는데요.함수안에 매개변수로 비교하는부분에서요 a,b에 대한 비교부분에서 이해가 잘안됩니다.매개변수안에서 a,b로 어떤 구조로 4개의 객체를 비교하는지 알려주시면 감사하겠습니다
-
미해결실전 프로젝트로 배우는 타입스크립트
요즘 바벨 사용 여부가 궁금합니다.
요즘엔 IE를 안쓰는데 바벨을 써야하는지요?환경 설정할 때 es버전을 어떤 걸 지원해야하는지 잘모르겠는데어떤 기준으로 적용하는 건지 궁금합니다.
-
미해결프로젝트로 배우는 React.js
13번째 DB에 저장을 따라하고 있습니다.
수업을 따라하면서 json-server는 -g 옵션을 넣어서 설치를 했습니다.npm install -g json-serverjson-server --watch db.json --port 3001npm i axios를 하고 npm start를 한 후 input과 textarea에 내용을 입력한 후 submit버튼을 눌렀는데 console 옆옆에 있는 network를 보니name 첫 부분에 빨간색으로 posts가 뜨면서 status가 404가 됩니다.무엇을 잘 못했을까요?https://github.com/yabosu02/cozi
-
미해결타입스크립트 입문 - 기초부터 실전까지
해당 인터페이스는 키값이 computed property name인건가요?
interface PhoneNumberDictionary { [asdasd: string]: { num: number; }; } 원래는 [phone: string]인데 위처럼 phone에 해당하는 텍스트 값을 임의로 asdasd 이런식으로 해도 동작하더라구요 ES6의 computed property name인 것 같기도 하면서 또 아닌 것 같기도 한데 저게 뭔지 잘 모르겠습니다. computed property name인가요?
-
미해결타입스크립트 입문 - 기초부터 실전까지
정의된 타입으로 타입을 제한하기 질문 드립니다.
선생님, 안녕하세요. 강의 잘 듣고 있습니다.궁금한 것이 두 가지가 생겨서 질문하려고 합니다.dropdown 예제에서 DropdownItem의 value가 어떤 타입이든 들어올 수 있어서 toString()에 밑줄이 그어지는 것으로 알고 있는데요,이를 해결하기 위해a. DropdownItem<T>에서 T를 string과 number로 제한해야 되는 것인지, 아니면b. 강의 예제처럼 toString()에 타입을 제한하는 것인지 모르겠습니다.위의 두 사진에서 보면 34번째 줄에 selectTag에 에러가 뜨는데요, 이유가 궁금합니다.감사합니다.
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
뒤죽박죽 올라가는 리스트 순서를 대비해 sort() API를 사용하라고 적어주셨는데 도저히 모르겠습니다..!
const storage = { fetch() { const arr = []; if(localStorage.length > 0){ for(let i = 0; i < localStorage.length; i++){ if(localStorage.key(i) !== 'loglevel:webpack-dev-server'){ arr.push(JSON.parse(localStorage.getItem(localStorage.key(i)))); } } } return arr; }, }; 답변 중 불러올 때 for 문을 돌리는데 순서 보장이 안된다고 하신 부분을 보고 위 쪽에 있는 for문을 말씀하신 건가 싶었고 그럼 이 부분에 있는 배열 arr에 sort()를 추가하는 건가? 싶었는데 제가 맞게 이해한 걸까요?sort라는 변수를 하나 추가한 뒤 arr.sort()를 넣은 후 return값에 arr대신 sort를 넣어보기도 했는데 잘못된 방 법인지 딱히 바뀌지 않더라구요.. 구글을 뒤져봐도 아직 못 찾아 좀 더 찾아보면서 질문도 함께 올려봅니다..
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
권한 재요청ㅡㅜ
초대장을 확인을 못해서 초대장이 소멸되었네요.ㅠㅠ 다시 부탁드립니다.인프런 아이디 : kik1611인프런 이메일 : kik1611@nate.com깃헙 아이디 : kik87827@gmail.com깃헙 Username : kik87827
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 권한 요청
권한 요청 드립니다.인프런 아이디 : cldud970@gmail.com인프런 이메일 : cldud970@gmail.com깃헙 아이디 : cldud970@naver.com깃헙 Username : Returnmakdo
-
해결됨타입스크립트 입문 - 기초부터 실전까지
ts 핸드북에 나오는 void 질문
안녕하세요!null값은 void로 선언 시 이렇게 되는데 제가 실수한 게 있나요???
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 권한 요청
깃헙 권한 요청 드립니다.인프런 아이디 : jiin724@gmail.com인프런 이메일 : jiin724@gmail.com깃헙 아이디 : jiin724@gmail.com깃헙 Username : amazingkj요청 드립니다~!
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
권한 재요청
깃헙 메일이 변경되어 권한 재요청 드립니다.인프런 아이디 : online_uiux@mediawill.com인프런 이메일 : online_uiux@mediawill.com깃헙 아이디 : online_uiux@mediawill.com깃헙 Username : online_uiux
-
미해결프로젝트로 배우는 React.js
useParams 가 동작하지 않습니다.
안녕하세요.useParams 으로 파라미터 값을 보낸 뒤,console.log() 로 값을 출력해 보고 싶은데요.자꾸 undefined 만 출력 됩니다.대체 이유가 뭘까요??? ㅠㅠㅠㅠㅠㅠ// App.js import './App.css'; import { Routes, Route } from 'react-router-dom'; import Navbar from './components/Navbar'; import routes from './routes'; function App() { return ( <div> <Navbar></Navbar> <div className='container mt-3'> <Routes> {routes.map((item, i) => { return ( <Route path={item.path} element={item.component()} key={i} ></Route> ); })} </Routes> </div> </div> ); } export default App; // routes.js import HomePage from './pages/HomePage'; import ListPage from './pages/ListPage'; import CreatePage from './pages/CreatePage'; import EditPage from './pages/EditPage'; import ShowPage from './pages/ShowPage'; const routes = [ { path: '/', component: HomePage, }, { path: '/blog', component: ListPage, }, { path: '/blog/create', component: CreatePage, }, { path: '/blog/edit', component: EditPage, }, { path: '/blog/:id', component: ShowPage, }, ]; export default routes;// ShowPage.js import { useParams } from 'react-router-dom'; const ShowPage = () => { let { id } = useParams(); console.log(id); // undefined 출력 return <div>Show Pages</div>; }; export default ShowPage;