
Here are additional good and bad practices for Vue.js:
General Coding Standards
- Avoid Magic Numbers and Strings:
- Use constants for values that are used repeatedly or have special meaning.
// GoodconstMAX_ITEMS=10;functionaddItem(item){if(items.length<MAX_ITEMS){items.push(item);}}// BadfunctionaddItem(item){if(items.length<10){items.push(item);}}
- Use
v-for
Efficiently:- When using
v-for
, always provide a uniquekey
to optimize rendering.
- When using
<!-- Good --><divv-for="item in items":key="item.id"> {{ item.name }}</div><!-- Bad --><divv-for="item in items"> {{ item.name }}</div>
- Avoid Inline Styles:
- Prefer using CSS classes over inline styles for better maintainability.
<!-- Good --><divclass="item">{{ item.name }}</div><stylescoped>.item{color:red;}</style><!-- Bad --><div:style="{ color: 'red' }">{{ item.name }}</div>
Component Practices
- Component Reusability:
- Design components to be reusable and configurable through props.
// Good<BaseButton:label="buttonLabel":disabled="isDisabled"@click="handleClick"/>// Bad<button:disabled="isDisabled"@click="handleClick">{{buttonLabel}}</button>
- Prop Validation:
- Always validate props using type and required attributes.
// Goodprops:{title:{type:String,required:true},age:{type:Number,default:0}}// Badprops:{title:String,age:Number}
- Avoid Long Methods:
- Break down long methods into smaller, more manageable methods.
// Goodmethods:{fetchData(){this.fetchUserData();this.fetchPostsData();},asyncfetchUserData(){...},asyncfetchPostsData(){...}}// Badmethods:{asyncfetchData(){constuserResponse=awaitfetch('api/user');this.user=awaituserResponse.json();constpostsResponse=awaitfetch('api/posts');this.posts=awaitpostsResponse.json();}}
- Avoid Computed Properties with Side Effects:
- Computed properties should be used for pure computations and not for side effects.
// Goodcomputed:{fullName(){return`${this.firstName}${this.lastName}`;}}// Badcomputed:{fetchData(){// Side effect: fetch data inside a computed propertythis.fetchUserData();returnthis.user;}}
Template Practices
- Use
v-show
vsv-if
:- Use
v-show
for toggling visibility without adding/removing elements from the DOM, andv-if
when conditionally rendering elements.
- Use
<!-- Good: Use v-show for toggling visibility --><divv-show="isVisible">Content</div><!-- Good: Use v-if for conditional rendering --><divv-if="isLoaded">Content</div><!-- Bad: Use v-if for simple visibility toggling --><divv-if="isVisible">Content</div>
- Avoid Large Templates:
- Keep templates clean and small; break them into smaller components if they become too large.
<!-- Good: Small, focused template --><template><div><BaseHeader/><BaseContent/><BaseFooter/></div></template><!-- Bad: Large, monolithic template --><template><div><header>...</header><main>...</main><footer>...</footer></div></template>
State Management Practices
- Use Vuex for State Management:
- Use Vuex for managing complex state across multiple components.
// Good// store.jsexportdefaultnewVuex.Store({state:{user:{}},mutations:{setUser(state,user){state.user=user;}},actions:{asyncfetchUser({commit}){constuser=awaitfetchUserData();commit('setUser',user);}}});
- Avoid Direct State Mutation in Components:
- Use mutations to modify Vuex state rather than directly mutating state in components.
// Goodmethods:{updateUser(){this.$store.commit('setUser',newUser);}}// Badmethods:{updateUser(){this.$store.state.user=newUser;// Direct mutation}}
Error Handling and Debugging
- Global Error Handling:
- Use Vue’s global error handler for catching and handling errors.
Vue.config.errorHandler=function(err,vm,info){console.error('Vue error:',err);};
- Provide User Feedback:
- Provide clear feedback to users when an error occurs.
// Goodmethods:{asyncfetchData(){try{constdata=awaitfetchData();this.data=data;}catch(error){this.errorMessage='Failed to load data. Please try again.';}}}// Badmethods:{asyncfetchData(){try{this.data=awaitfetchData();}catch(error){console.error('Error fetching data:',error);}}}
By adhering to these additional practices, you can further enhance the quality, maintainability, and efficiency of your Vue.js applications.
Top comments(0)
Subscribe
For further actions, you may consider blocking this person and/orreporting abuse