Redux-Sagaเป็นไลบรารีมิดเดิลแวร์ที่จัดการงาน async ที่มีผลข้างเคียง เช่น API นอกจากนี้เรายังสามารถอ่านสถานะและเรียกใช้การดำเนินการกับ Saga ได้ มันใช้ฟังก์ชันตัวสร้างเพื่อทำงานแบบอะซิงโครนัส
โครงร่างต่อไปนี้อธิบายสาเหตุที่เราใช้ Saga และวิธีการติดตั้ง จากนั้นจะกล่าวถึงวิธีการที่เป็นประโยชน์ของ Saga สำหรับการจัดการ API
หน้าที่หลักของ Saga คือการจัดการการเรียก API และอัปเดตสถานะตามการตอบสนองของปลายทาง! ข้อดีอย่างหนึ่งของ redux-saga คือการทดสอบที่เป็นมิตร
ก่อนทำงานกับ Redux-Saga คุณควรทำความคุ้นเคยกับ Redux เสียก่อน
มีสองวิธีในการติดตั้ง redux-saga ตามตัวจัดการแพ็คเกจของคุณ:
npm install redux-saga
yarn add redux-saga
import { call, put, takeEvery } from 'redux-saga/effects'
import Api from '...'
function* fetchUser(action) {
try {
const user = yield call(Api.fetchUser, action.payload.userId);
yield put({type: "USER_FETCH_SUCCEEDED", user: user});
} catch (e) {
yield put({type: "USER_FETCH_FAILED", message: e.message});
}
}
function* mySaga() {
yield takeEvery("USER_FETCH_REQUESTED", fetchUser);
}
export default mySaga;
API อาจเป็นดังนี้:
import axios from 'axios';
const Api = {
fetchUser: (userId) => {
return axios.get(`...?userId=${userId}`)
}
};
export default Api;
import { createStore, applyMiddleware } from 'redux'
import createSagaMiddleware from 'redux-saga'
import reducer from './reducers'
import mySaga from './sagas'
const sagaMiddleware = createSagaMiddleware();
const store = createStore(
reducer,
applyMiddleware(sagaMiddleware)
);
sagaMiddleware.run(mySaga);
วิธีการที่ใช้มากที่สุดจะอธิบายดังต่อไปนี้:
มันอ่านจากตัวเลือก (สถานะ) นี่คือตัวอย่างการโทรที่เลือก
const userId = yield select(userSelectors.getUserId);
มันส่งการกระทำเช่น:
yield put({type: "USER_FETCH_SUCCEEDED", user: user});
มันเรียกใช้ฟังก์ชัน async เช่น API เช่น:
const user = yield call(Api.fetchUser, action.payload.userId);
มันคอยดูการดำเนินการแต่ละครั้งเพื่อเรียกใช้ฟังก์ชันตัวสร้าง
yield takeEvery("USER_FETCH_REQUESTED", fetchUser);
มันเหมือนกับ take ทุกความแตกต่างเพียงอย่างเดียวคือเมื่อการโทรครั้งก่อนอยู่ระหว่างรอจะไม่โทรอีก
yield takeLatest("USER_FETCH_REQUESTED", fetchUser);
Redux-saga เป็นไลบรารีสำหรับจัดการงาน async ใน redux ในบทความนี้จะกล่าวถึงสาเหตุและวิธีการใช้ Saga และวิธีการต่างๆ
หากคุณเป็นคนที่มักจะเพิกเฉยต่อข้อความเตือน “แต่ละองค์ประกอบควรมีคีย์เฉพาะ” ในขณะที่ทำการแมปอาร์เรย์ใน React สิ่งสำคัญคือต้องใช้เวลาสักครู่เพื่อทำความเข้าใจว่าทำไมคำเตือนนี้จึงถูกยกขึ้นตั้งแต่แรก ใน React เมื่อเรนเดอร์รายการโดยใช้ “Array.
หลักสูตรเร่งรัดพร้อมอินโฟกราฟิกเกี่ยวกับความหมายเหล่านี้ และควรใช้เมื่อใด ความเป็นมา ลักษณะที่สำคัญประการหนึ่งของการพัฒนา REST API คือวิธีที่ไคลเอ็นต์ส่งคำขอและรับการตอบกลับ
[ทริกเกอร์การแจ้งเตือน: บทความนี้รวมถึงภาพหน้าจอของผู้คนที่ยกย่องฆาตกรจอร์แดน นีลี] ในที่สุดเจ้าหน้าที่บังคับใช้กฎหมายก็ได้ตั้งข้อหาแดเนียล เพนนี ชายผู้บีบคอจอร์แดน นีลีจนเสียชีวิตในข้อหาฆาตกรรมครั้งนั้น และอาจไม่เต็มใจนัก
(คำเตือน- นี่คือการเสียดสี ตั้งใจที่จะทำลายล้างอย่างสนุกสนาน- ไม่เหมาะสำหรับเด็กอย่างแน่นอน) คุณเคยเห็นพ่อกับแม่ของคุณซ่อนตัวอยู่ในครัวและสูบบุหรี่ที่มีกลิ่นเหม็นเหล่านั้น พวกเขาบอกคุณ
ของเก่ากลายเป็นของใหม่อีกครั้ง และของที่เคยเป็นประกายระยิบระยับกลับดูจืดชืด ฉันไม่ได้กำลังพูดถึงกางเกงยีนส์ JNCO ที่กลับมาเป็นที่นิยมในหมู่เด็กเท่ๆ ในตัวเมืองพร้อมกับแฟชั่นอื่นๆ ในช่วงปลายทศวรรษ 1990