• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    해결됨

PostEditView 에서 수정 후, PostDetailView 에서의 데이터 동기 문제

24.01.14 17:48 작성 조회수 157

0

[문제점]

PostEditView 에서 post 데이터를 수정한 후,

PostDetailView 로 이동했을 때, 수정된 데이터가 아닌

이전 데이터가 출력되는 문제 발생.

 

[테스팅]

json-server 를 최신 버전으로 업해서 테스트 >> 개선안됨.

다양하게 코드를 변경하며 테스트를 해봤지만 개선안됨.

PostDetailView 에서 ref, reactive 를 변경하며 다양하게 시도했지만 개선 안됨.

 

[원인]

  1. updatePost 함수가 수행 후 반환 하더라도 json-server
    내부적으로 실제 데이터 갱신에 시간이 걸리는 것이 아닌지 의심됨.

  2. udatePost 후, getPostById 로 데이터를 가져와 콘솔에 출력하면, 갱신되기 전의 데이터가 출력되는 것으로 보아 vue cache or refresh 문제는 아닐 것으로 생각됨.

 

[임시해결]

const onUpdate = async () => {
	try {
		await updatePost(props.id, form);
		nextTick(async ()=> {
			const { data } = await getPostById(props.id);
			console.log('After updatePost, data: ', data);
			// router.push({ name: 'PostDetail', props: {id: props.id} });
			router.back();	
		});		
	} catch (error) {
		console.log('onUdate error: ', error);
	}
};

 

다음 Tick 에서 getPostById 함수를 이용하여 갱신된 데이터를 조회(시간 지연 및 데이터 확인)하고 PostDetailView 로 이동하면 제대로 출력됨...

a. 위 코드에서 출력되는 데이터는 갱신 전의 데이터가 출력됨.
b. 위 코드에서 getPostById 로 데이터 조회를 빼면 PostDetailView 에 갱신 이전 데이터가 출력됨.

c. 위 코드에서 router push, go, back 함수 무엇을 쓰던 현상은 동일함.

 

보다 정확한 문제 원인 또는 문제 해결 방법이 있을까요 ??

 

답변 2

·

답변을 작성해보세요.

1

초천재님의 프로필

초천재

2024.01.15

안녕하세요

updatePost 함수 구현 문제였습니다.

promise 객체를 반환하고 있지 않은 상태에서 onUpdate 에서 await 를 수행하고 있었습니다.

또한 json-server 버전이 1.0.0-alpha.21 버전이었는데, ID 가 문자열로 변경되는 문제가 있었습니다.

 

답변 감사드립니다.~

0

안녕하세요 🙂

아래 패키지들은 강의에서 사용한 패키지 버전정보입니다.

"dependencies": {
  "axios": "^0.27.2",
  "bootstrap": "^5.1.3",
  "bootstrap-icons": "^1.8.1",
  "dayjs": "^1.11.2",
  "pinia": "^2.0.14",
  "vue": "^3.2.33",
  "vue-router": "^4.0.15"
},
"devDependencies": {
  "@rushstack/eslint-patch": "^1.1.0",
  "@vitejs/plugin-vue": "^2.3.1",
  "@vue/eslint-config-prettier": "^7.0.0",
  "eslint": "^8.5.0",
  "eslint-plugin-vue": "^8.2.0",
  "json-server": "^0.17.0",
  "prettier": "^2.5.1",
  "unplugin-vue-components": "^0.19.5",
  "vite": "^2.9.5"
}

node_modules 디렉토리와 package-lock.json 파일 삭제 후 npm install 로 재설치해서 다시 시도해 보시겠어요?

json-server 주요 버전이 변경돼서요.

 

그리고 updatePost 함수 내부 코드도 보여주실 수 있을까요?