Redux-Saga

Redux-Sagaเป็นไลบรารีมิดเดิลแวร์ที่จัดการงาน async ที่มีผลข้างเคียง เช่น API นอกจากนี้เรายังสามารถอ่านสถานะและเรียกใช้การดำเนินการกับ Saga ได้ มันใช้ฟังก์ชันตัวสร้างเพื่อทำงานแบบอะซิงโครนัส

โครงร่างต่อไปนี้อธิบายสาเหตุที่เราใช้ Saga และวิธีการติดตั้ง จากนั้นจะกล่าวถึงวิธีการที่เป็นประโยชน์ของ Saga สำหรับการจัดการ API

เหตุใดเราจึงใช้ Redux-Saga

หน้าที่หลักของ Saga คือการจัดการการเรียก API และอัปเดตสถานะตามการตอบสนองของปลายทาง! ข้อดีอย่างหนึ่งของ redux-saga คือการทดสอบที่เป็นมิตร

ก่อนทำงานกับ Redux-Saga คุณควรทำความคุ้นเคยกับ Redux เสียก่อน

จะติดตั้ง Redux-saga ได้อย่างไร?

มีสองวิธีในการติดตั้ง 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 และวิธีการต่างๆ

Suggested posts

บทบาทสำคัญของ "คีย์" ในการแมปอาร์เรย์

บทบาทสำคัญของ "คีย์" ในการแมปอาร์เรย์

หากคุณเป็นคนที่มักจะเพิกเฉยต่อข้อความเตือน “แต่ละองค์ประกอบควรมีคีย์เฉพาะ” ในขณะที่ทำการแมปอาร์เรย์ใน React สิ่งสำคัญคือต้องใช้เวลาสักครู่เพื่อทำความเข้าใจว่าทำไมคำเตือนนี้จึงถูกยกขึ้นตั้งแต่แรก ใน React เมื่อเรนเดอร์รายการโดยใช้ “Array.

สถาปัตยกรรม API - การเรียกแบบซิงโครนัส อะซิงโครนัส และแบบขนาน

สถาปัตยกรรม API - การเรียกแบบซิงโครนัส อะซิงโครนัส และแบบขนาน

หลักสูตรเร่งรัดพร้อมอินโฟกราฟิกเกี่ยวกับความหมายเหล่านี้ และควรใช้เมื่อใด ความเป็นมา ลักษณะที่สำคัญประการหนึ่งของการพัฒนา REST API คือวิธีที่ไคลเอ็นต์ส่งคำขอและรับการตอบกลับ

Related posts

การฆาตกรรมของจอร์แดน นีลี และปัญหาการเหยียดเชื้อชาติ "ผู้รักชาติ"

สหรัฐฯ สามารถดำเนินขั้นตอนสำคัญในการไม่ถือเอาพฤติกรรมเหยียดเชื้อชาติกับการเป็นชาวอเมริกันที่ดีได้หรือไม่?

การฆาตกรรมของจอร์แดน นีลี และปัญหาการเหยียดเชื้อชาติ "ผู้รักชาติ"

[ทริกเกอร์การแจ้งเตือน: บทความนี้รวมถึงภาพหน้าจอของผู้คนที่ยกย่องฆาตกรจอร์แดน นีลี] ในที่สุดเจ้าหน้าที่บังคับใช้กฎหมายก็ได้ตั้งข้อหาแดเนียล เพนนี ชายผู้บีบคอจอร์แดน นีลีจนเสียชีวิตในข้อหาฆาตกรรมครั้งนั้น และอาจไม่เต็มใจนัก

หนังสือเด็กเล่มแรกของการสูง

หนังสือเด็กเล่มแรกของการสูง

(คำเตือน- นี่คือการเสียดสี ตั้งใจที่จะทำลายล้างอย่างสนุกสนาน- ไม่เหมาะสำหรับเด็กอย่างแน่นอน) คุณเคยเห็นพ่อกับแม่ของคุณซ่อนตัวอยู่ในครัวและสูบบุหรี่ที่มีกลิ่นเหม็นเหล่านั้น พวกเขาบอกคุณ

วารสาร Outvert

วารสาร Outvert

เปิดไดอารี่: รูปภาพต่อวัน ฉันเคยหลงใหลในเรื่องราวต่างๆ

เครือข่ายทีวีทวิตเตอร์

เครือข่ายทีวีทวิตเตอร์

ของเก่ากลายเป็นของใหม่อีกครั้ง และของที่เคยเป็นประกายระยิบระยับกลับดูจืดชืด ฉันไม่ได้กำลังพูดถึงกางเกงยีนส์ JNCO ที่กลับมาเป็นที่นิยมในหมู่เด็กเท่ๆ ในตัวเมืองพร้อมกับแฟชั่นอื่นๆ ในช่วงปลายทศวรรษ 1990