더 나은 Vue JS 코드 작성
15793 단어 vuejavascriptcomputersciencevuex
소개
프로젝트 시작 시 아키텍처는 중요하지 않을 수 있지만 구성 요소를 손상시키지 않고 추가하거나 제거할 수 있는 용이성은 코드베이스가 얼마나 잘 구조화되었는지를 보여줍니다. Vue JS 코드를 더 좋게 만드는 방법을 살펴보겠습니다.
상태, 맵 게터 및 작업을 사용합니다.
Vuex에서 제공하는 상태 및 맵(예: mapGetters, mapActions, mapState 등)을 사용하면 코드를 매우 재사용할 수 있습니다. SFC의 data() 객체에 대한 하드 코딩 상태는 "더 빠름"이 향후 이러한 값 중 일부가 필요한 경우 어려움을 일으키기 때문입니다.
<!-- first.vue -->
<template>
<h3>{{firstname}}{{lastname}}</h3>
</template>
<script>
export default {
data() {
return {
firstname: "",
lastname: ""
};
},
methods: {
async getFullName() {
const { firstname, lastname } = await fetchNameFromApi();
this.firstname = firstname;
this.lastname = lastname;
}
},
created() {
this.getFullName();
}
};
</script>
프로젝트 관리자: 두 페이지에 더 표시하려면 이름과 성이 필요합니다.
해당 요청을 통해 다른 파일에서 계속 복사, 붙여넣기, 가져오기 및 내보내기를 수행하게 됩니다.
그래도 낫다,
const state = {
firstname: "",
lastname: ""
};
const actions = {
async getFullName({ commit, dispatch }, data) {
getFullNameFromApi().then(res => {
commit(mutate.FULL_NAME, res.body);
});
}
};
const mutations = {
//Set default mutation types in another file
[mutate.UPDATE_FULL_NAME](state, data) {
state.firstname = data.firstName;
state.lastname = data.lastName;
}
};
const getters = {
firstName: state => state.firstname,
lastName: state => state.lastname
};
const FullName = {
state,
actions,
mutations,
getters
};
export default FullName;
그런 다음 first.vue 구성 요소에서
<template>
<h3>{{firstName}}{{lastName}}</h3>
</template>
<script>
import {mapGetters, mapActions} from 'vuex';
export default {
methods:{
...mapActions(['getFullName']);
},
created(){
this.getFullName();
},
computed:{
...mapGetters(['firstName', 'lastName']);
}
}
</script>
이제 사용자의 성과 이름이 필요한 새 구성 요소를 포함해야 하는 경우 getter와 작업을 쉽게 매핑할 수 있습니다.
이것은 또한 다음과 같은 것을 피하는 데 도움이 됩니다.
const firstname = this.$store.state.fullName.firstName;
const lastname = this.$store.state.fullName.lastName;
우리는 단순히 getter를 사용할 수 있습니다
computed:{
...mapGetters(['firstName','lastName'])
}
마지막으로 이것은 SFC에서 비즈니스 로직을 추상화하는 데 도움이 되며 테스트를 더 쉽게 만듭니다. Store가 모든 논리를 처리하도록 허용하고 SFC는 경고 버튼/스낵 바 등의 상태와 같이 밀접하게 연결된 항목을 처리해야 합니다.
믹스인을 통한 필터.
믹스인은 암시적 종속성, 네임스페이스 충돌 등으로 이어집니다. 이에 대해 자세히 알아볼 수 있습니다here. 일부 믹스인은 필터로 변환할 수 있습니다.
//dateMixin.js
export default {
methods: {
formatDate(date) {
return date.split("T")[0];
}
}
};
SFC에는 다음이 있습니다.
<template>
<h3>{{formatDate(date)}}</h3>
</template>
<script>
import dateMixin from "./dateMixin";
export default {
mixins: [dateMixin],
data() {
return {
date: "2019-08-07T00:00:00"
};
}
};
</script>
필터로,
//main.js
import Vue from "vue";
Vue.filter("formatDate", value => value.split("T")[0]);
저희 에스에프씨에서는
<template>
<h3>{{date | formatDate}}</h3>
</template>
<script>
export default {
data() {
return {
date: "2019-08-07T00:00:00"
};
}
};
</script>
모듈을 사용하여 애플리케이션에서 서로 다른 서비스를 분리합니다.
상태에 필요한 모든 것을 하나의 개체에 포함하는 대신 모듈로 분리할 수 있습니다.
대신에
const state = {
token: "",
amount: "",
firstname: "",
lastname: "",
email: "",
isLoggedIn: ""
};
인증, 프로필 관리, 지갑으로 서비스를 나눌 수 있습니다.
폴더 구조는 다음과 같습니다.
modules
authentication
index.js
profile-management
index.js
wallet
index.js
index.js 파일에서 해당 서비스에 중요한 상태를 가질 수 있습니다.
//modules/authentication/index.js
const state = {
token: '',
isLoggedIn:''
}
...
그런 다음 스토어를 초기화할 때 모든 모듈을 추가할 수 있습니다.
export const store = new Vuex.store({
state: {
//something general
isAppBusy: false
},
modules:{
authentication,
profile-management,
wallet
}
});
결론
Vue 코드의 구조를 개선하는 방법에 대한 제 생각입니다. 덧셈이나 뺄셈이 더 있으면 댓글로 보고싶네요 😄.
Reference
이 문제에 관하여(더 나은 Vue JS 코드 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/obbap/write-better-vue-js-code-36mg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<!-- first.vue -->
<template>
<h3>{{firstname}}{{lastname}}</h3>
</template>
<script>
export default {
data() {
return {
firstname: "",
lastname: ""
};
},
methods: {
async getFullName() {
const { firstname, lastname } = await fetchNameFromApi();
this.firstname = firstname;
this.lastname = lastname;
}
},
created() {
this.getFullName();
}
};
</script>
const state = {
firstname: "",
lastname: ""
};
const actions = {
async getFullName({ commit, dispatch }, data) {
getFullNameFromApi().then(res => {
commit(mutate.FULL_NAME, res.body);
});
}
};
const mutations = {
//Set default mutation types in another file
[mutate.UPDATE_FULL_NAME](state, data) {
state.firstname = data.firstName;
state.lastname = data.lastName;
}
};
const getters = {
firstName: state => state.firstname,
lastName: state => state.lastname
};
const FullName = {
state,
actions,
mutations,
getters
};
export default FullName;
<template>
<h3>{{firstName}}{{lastName}}</h3>
</template>
<script>
import {mapGetters, mapActions} from 'vuex';
export default {
methods:{
...mapActions(['getFullName']);
},
created(){
this.getFullName();
},
computed:{
...mapGetters(['firstName', 'lastName']);
}
}
</script>
const firstname = this.$store.state.fullName.firstName;
const lastname = this.$store.state.fullName.lastName;
computed:{
...mapGetters(['firstName','lastName'])
}
//dateMixin.js
export default {
methods: {
formatDate(date) {
return date.split("T")[0];
}
}
};
<template>
<h3>{{formatDate(date)}}</h3>
</template>
<script>
import dateMixin from "./dateMixin";
export default {
mixins: [dateMixin],
data() {
return {
date: "2019-08-07T00:00:00"
};
}
};
</script>
//main.js
import Vue from "vue";
Vue.filter("formatDate", value => value.split("T")[0]);
<template>
<h3>{{date | formatDate}}</h3>
</template>
<script>
export default {
data() {
return {
date: "2019-08-07T00:00:00"
};
}
};
</script>
const state = {
token: "",
amount: "",
firstname: "",
lastname: "",
email: "",
isLoggedIn: ""
};
modules
authentication
index.js
profile-management
index.js
wallet
index.js
//modules/authentication/index.js
const state = {
token: '',
isLoggedIn:''
}
...
export const store = new Vuex.store({
state: {
//something general
isAppBusy: false
},
modules:{
authentication,
profile-management,
wallet
}
});
Vue 코드의 구조를 개선하는 방법에 대한 제 생각입니다. 덧셈이나 뺄셈이 더 있으면 댓글로 보고싶네요 😄.
Reference
이 문제에 관하여(더 나은 Vue JS 코드 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/obbap/write-better-vue-js-code-36mg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)