vue+alova 시작하기
18761 단어 vuejavascriptalova
들어보지 못한 것이 정상입니다. MVVM 프로젝트에서 다양한 요청 시나리오의 문제를 해결하는 데 사용되는 RSM 구현 라이브러리이며 서버 측 상태를 관리하는 데 도움이 될 수도 있습니다.
그것은 마치 무장한 액시오스 라이브러리와 같으며, 액시오스에 날개를 더합니다.
To learn more about RSM, please refer to
이 글은 vue+alova에 대한 기본 소개입니다. 다음을 배울 수 있습니다.
다음 시작하기 가이드에서는 todo를 예로 들어 다양한 날짜에 대한 todo 목록을 가져오고, todo 세부 정보를 보고, 항목을 생성, 편집 및 삭제하는 데 필요한 사항을 설명합니다!
alova install: npm install alova --save-dev
alova 인스턴스 초기화
alova
인스턴스는 사용 시작 지점이며 모든 요청은 여기에서 시작해야 합니다. axios
와 같이 작성되며 다음은 alova
인스턴스를 생성하는 가장 간단한 방법입니다.import { createAlova } from 'alova';
import GlobalFetch from 'alova/GlobalFetch';
import VueHook from 'alova/vue';
const alovaInstance = createAlova({
// Suppose we need to interact with the server for this domain
baseURL: 'https://api.todo.com',
// Introduce VueHook under the vue project, which can help us create request-related states that can be managed by alova using vue's ref function
statesHook: VueHook,
// Request adapter, here we use fetch request adapter
requestAdapter: GlobalFetch(),
// Set a global request interceptor, similar to axios
beforeRequest(config) {
// Suppose we need to add the token to the request header
config.headers.token = 'token';
},
// Response interceptor, also similar to axios
async responsed(response, config) => {
const json = await response.json();
if (json.code !== 200) {
// When an error is thrown here, it will enter the request failure interceptor
throw new Error(json.message);
}
return json.data;
},
});
할 일 목록 - 인터페이스 렌더링을 위해 alova가 관리하는 상태를 직접 사용
이 데모의 인터페이스는 다음과 같습니다.
useRequest
를 사용하여 요청을 보냅니다. 이는 페이지가 초기화된 데이터를 가져오는 가장 일반적인 방법입니다.const todoListGetter = alovaInstance.Get('/todo/list');
const {
// loading is the loading state value, when it is loaded, its value is true, and it is automatically updated to false after the end
// It is a value of type Ref, you can access it through loading.value, or bind directly to the interface
loading,
// response data
data: todoList,
// Request error object, it has a value when the request is wrong, otherwise it is undefined
error,
// successful callback binding
onSuccess,
// Failed callback binding
onError,
// complete callback binding
onComplete,
// Directly pass in the Method object to send the request
} = useRequest(todoListGetter, {
// initial data data
initialData: [],
});
// ###### callback settings
onSuccess(todoListRaw => {
console.log('The request is successful, the response data is:', todoListRaw);
});
onError(error => {
console.log('The request failed, the error message is:', error);
});
onComplete(() => {
console.log('The request is completed, it will be called regardless of success or failure');
});
다음으로 렌더링 인터페이스에 todoList를 렌더링합니다. 완료!
<div v-if="loading">Loading...</div>
<div v-else-if="error" class="error">{{ error.message }}</div>
<template v-else>
<div v-for="todo in todoList">
<div class="todo-title">{{ todo.title }}</div>
<div class="todo-time">
<span class="time">{{ todo.startTime }}</span>
to
<span class="time">{{ todo.endTime }}</span>
</div>
</div>
</template>
todo 편집 페이지 - 자주 요청되는 데이터를 메모리에 캐시
편집 페이지는 다음과 같습니다.
여기서 시나리오를 고려해야 합니다. 사용자는 할 일 항목을 여러 번 클릭하여 몇 초 안에 볼 수 있으며, 입력할 때마다 서버에 요청하는 것은 약간 낭비입니다. 이때 프런트 엔드 캐싱 레이어를 수행하여 표시 속도를 개선하고 서버의 부담을 줄일 수 있습니다. .
const todoDetail = id => alovaInstance. Get(`/todo/${id}`, {
// Set a 5-minute local memory cache, refresh will be invalid
localeCache: 5 * 60 * 1000,
});
const {
loading,
// response data
data: todoDetail,
error,
} = useRequest(todoDetail(params.id));
페이지 렌더링 코드
<div v-if="loading">loading...</div>
<div v-else>
<input v-model="todoDetail.title" />
<input v-model="todoDetail.date" />
<input v-model="todoDetail.startTime" />
<input v-model="todoDetail.endTime" />
<!-- ... -->
<button @click="handleAddTodo">Submit data</button>
</div>
데이터 제출 코드 - 수동으로 할 일 목록 데이터 업데이트
const createTodoPoster = newTodo => alova.Post('/todo', newTodo);
const {
loading,
data,
error,
// The function of the manual sender request, the request is sent after the call
send: submitTodo,
} = useRequest(() => createTodoPoster(todoDetail.value), {
// When immediate is false, no more requests are made during initialization
immediate: false
});
// Manually send the request
const handleAddTodo = () => {
submitTodo()
.then(result => {
// Update the list data, get the status of the todo list, and return the updated data
updateState(todoDetail(params.id), todoListData => {
const index = todoListData.findIndex(({ id }) => id === params.id);
todoListData[index] = todoDetail.value;
return todoListData;
});
})
.catch(error => {
console.log('Failed to add todo item, the error message is:', error);
});
};
퍼지 검색 할일 항목
퍼지 검색 기능은 키워드를 입력하는 과정에서 지속적으로 요청을 보내는 것입니다. 사용자 경험을 개선하고 서버의 부담을 줄이기 위해 검색 흔들림 방지를 구현해야 합니다.
구현 코드는 다음과 같습니다.
const searchTodo = keyword => alovaInstance.Get(`/todo?keyword=${keyword}`);
// Monitor keyword changes through useWatcher, and automatically re-issue the request after the change
const keyword = ref('');
const {
loading,
data,
} = useWatcher(() => searchTodo(keyword.value), [keyword], {
debounce: 500, // set 500ms debounce
});
이러한 방식으로 손떨림 방지 기능이 있는 퍼지 검색 기능이 실현됩니다.
요약하다
이번 호의 시작 가이드는 여기까지입니다. vue+alova의 기본 사용법도 다룹니다. 시도해 볼 수도 있습니다. 질문을 교환할 의견 영역에 오신 것을 환영합니다.
Reference
이 문제에 관하여(vue+alova 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/coderhu/getting-started-with-vuealova-2fi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)