programing

국가/스토어에서 레독스가 기능을 통해 물건을 얻는 방법은 무엇입니까?

telecom 2023. 4. 5. 21:16
반응형

국가/스토어에서 레독스가 기능을 통해 물건을 얻는 방법은 무엇입니까?

saga 함수 내의 redux 상태에 액세스하려면 어떻게 해야 합니까?

간단한 답변:

import { select } from 'redux-saga/effects';
...
let data = yield select(stateSelectorFunction);

이미 @markerikson이 말했듯이redux-saga를 호출하기 위해 매우 유용한 API를 공개합니다.selector그 중 일부를 입수할 수 있도록 하는 것에 대해서요.

예를 들어 간단한 구현은 다음과 같습니다.

/*
 * Selector. The query depends by the state shape
 */
export const getProject = (state) => state.project

// Saga
export function* saveProjectTask() {
  while(true) {
    yield take(SAVE_PROJECT);
    let project = yield select(getProject); // <-- get the project
    yield call(fetch, '/api/project', { body: project, method: 'PUT' });
    yield put({type: SAVE_PROJECT_SUCCESS});
  }
}

@markerikson의 추천 문서 외에 D의 매우 좋은 비디오 튜토리얼이 있습니다.사용법을 설명하는 아브라모프selectors레독스와 함께.트위터에서 이 흥미로운 스레드도 확인하세요.

이것이 "실렉터" 함수의 목적입니다.주 전체 트리를 넘겨주면 주의 일부를 돌려주죠셀렉터를 호출하는 코드는 데이터가 반환된 상태에서의 위치를 알 필요가 없습니다.예에 대해서는, http://redux.js.org/docs/recipes/ComputingDerivedData.html 를 참조해 주세요.

사가 내에서 API를 사용하여 셀렉터를 실행할 수 있습니다.

event Channel을 사용하여 생성기 함수 내의 콜백에서 액션을 디스패치했습니다.

import {eventChannel} from 'redux-saga';
import {call, take} from 'redux-saga/effects';

function createEventChannel(setEmitter) {
    return eventChannel(emitter => {
        setEmitter(emitter)
        return () => {

        }
      }
    )
}

function* YourSaga(){
    let emitter;
    const internalEvents = yield call(createEventChannel, em => emitter = em)

    const scopedCallback = () => {
        emitter({type, payload})
    }

    while(true){
        const action = yield take(internalEvents)
        yield put(action)
    }
}

언급URL : https://stackoverflow.com/questions/37772877/how-to-get-something-from-the-state-store-inside-a-redux-saga-function

반응형