inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex

[리팩토링] mutations로 할 일 추가, 완료, 모두 삭제 구현

뒤죽박죽 올라가는 리스트 순서를 대비해 sort() API를 사용하라고 적어주셨는데 도저히 모르겠습니다..!

680

백억그니

작성한 질문수 1

1

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를 넣어보기도 했는데 잘못된 방 법인지 딱히 바뀌지 않더라구요..

구글을 뒤져봐도 아직 못 찾아 좀 더 찾아보면서 질문도 함께 올려봅니다..

javascript vue.js es6 vuex

답변 1

2

백억그니

앗..해결했습니다.

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))));
                    arr.sort(function(a,b){ //sort 추가
                        if(a.key > b.key){
                            return 1;
                        }
                        if(a.key < b.key){
                            return -1;
                        }
                        return 0;
                    });
                }
            }
        }
        return arr;
    },
};

export const store = new Vuex.Store({
    state: {
        todoItems: storage.fetch(),
        num: 1 // num을 추가!
    },
    mutations: {
        addOneItem(state, todoItem) {
            const obj = {completed: false, item: todoItem, key: state.num};
            localStorage.setItem(todoItem, JSON.stringify(obj));
            
            if(!state.todoItems.some(element => element.item == todoItem)){
                state.todoItems.push(obj);
                state.num++ //num값 하나씩 플러스
            }else{
                alert('이미 같은 내용이 있습니다!🐅');
            }
        },
        removeOneItem(state, payload){
            localStorage.removeItem(payload.todoItem.item);
            state.todoItems.splice(payload.index, 1);
            state.num-- //num값 하나씩 마이너스
        },
        toggleOneItem(state, payload){
            state.todoItems[payload.index].completed = !state.todoItems[payload.index].completed;

            //로컬 스트리지에 새로운 데이터를 갱신
            localStorage.removeItem(payload.todoItem.item);
            localStorage.setItem(payload.todoItem.item, JSON.stringify(payload.todoItem));
        },
        clearAllItems(state){
            localStorage.clear();
            state.todoItems = [];
            state.num = 1; //num값 1로 초기화
        }
    },
});


  1. state에 num을 만들어 숫자 1을 추가했고

  2. addOnItem이 실행될 때 추가되는 obj에 key값을 추가한 뒤

  3. add를 완료한 후에는 num++,
    remove를 완료한 후에는 num--,
    모두 지울 경우에는 num = 1로 초기화시켜주니

새로고침을 해도 처음 작성한 순서 그대로 나오네요.
(사용자가 작성한 순서가 바뀌지 않았으면 했거든요..)
dev툴 Application을 확인하면 key 값의 순서는 여전히 뒤죽박죽이지만 (이 부분은 브라우저에서 바꾸는 거라 저희가 못하는 부분이라고 하신 걸로 기억하는데 맞죠?)

말씀해주신 sort API를 활용하니 구현해냈습니다..!
2시간 가량 걸렸지만 스스로 해결하니 정말 뿌듯하네요..😂

0

캡틴판교

아 네 창근님 잘 해결하셨군요. 고생 많으셨습니다 또 궁금하신거 있으면 알려주세요 :)

Chrome 개발자 모드 확장이 안됨

0

254

1

깃 권한 요청드립니다

0

118

1

vue.js 중급 리포지토리 권한 관련

0

118

1

vuex + axios 질문 있습니다!

1

198

2

깃 권한 요청드립니다!

0

161

1

강의 깃주소 문의

0

144

1

router-view에 props를 어떻게 넘길 수 있나요?

1

279

2

Vue가 인식되지 않는 현상

0

205

1

기초강좌는 어디있나요?

1

190

2

App.vue가 필요한 이유

0

192

1

getter가 정의되어 있지 않아 오류가 발생합니다.

1

253

1

뷰 라이프사이클

1

187

1

TSLint 말고 TSLint Vue 설치해도 되나요?

1

367

3

로컬 스토리지는 어디에 있나요?

1

279

1

vuex 실행시 새로고침해야지만 리스트에 나타나는 현상

1

387

2

export default 관련한 질문

0

354

2

깃허브 vue-todo 접근불가에 따른 확인요청

1

354

2

깃허브에 문제있는것 같습니다.

1

273

2

인프런 강의 재생 화면 구성 변경 문의드립니다

1

303

2

addTodo Helper 함수 적용

1

243

1

vuex 헬퍼 전역 설정

1

245

2

github 권한요청드립니다.

1

258

2

이벤트 위치에 대한 궁금증 입니다.

1

223

2

구조 차이에 대한 문의

1

344

2