inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] React로 NodeBird SNS 만들기

redux saga를 사용한 비동기 통신 질문

476

김지현

작성한 질문수 4

0

안녕하세요 강사님, 비동기 통신 관련해서 질문이 있습니다.

상세페이지를 만들면서 map 돌린 것 중 어떤 아이템을 클릭하면 아이템의 이름을 url 주소에 넣고, 그걸 매개변수로 데이터를 가져오려고 합니다.

그래서 api를 result를 매개변수로 아래와 같이 만들고 saga도 만들었습니다.

getWordArt: (result) => localApi.get("/api/markets/search?text=" + result),

function* loadSearchArt(action) {

try {

const result = yield call(ArtApi.getWordArt());

yield put({

type: SEARCHART_SUCCESS,

data: result.data,

});

} catch (err) {

yield put({

type: SEARCHART_FAILURE,

error: err.response.data,

});

}

}

function* watchLoadSearchArt() {

yield takeLatest(SEARCHART_REQUEST, loadSearchArt);

}

export default function* ArtSaga() {

yield all([

fork(watchLoadSearchArt),

]);

}

그리고 useParams로 result를 가져와서 아래처럼 getWordArt에 매개변수로 넣었습니다.

const { result } = useParams();

useEffect(() => {

ArtApi.getWordArt(result)

.then((res) => {

setSearchArt(res.data.data.markets);

})

.catch((err) => {

throw new Error(err);

});

}, [result]);

데이터는 잘 가져오는데 이 코드를 dispatch를 사용해서 아래처럼 수정하고 싶은데 어떻게 하면 좋을지 잘 모르겠어서 질문합니다.

useEffect(() => {

dispatch({

type: SEARCHART_REQUEST,

});

}, [dispatch]);

저런 코드에 result를 여기저기 넣어봤는데 데이터를 못 가져옵니다ㅜㅜ

아래에 reducer도 같이 첨부합니다.

const initialState = {

searchArt: [],

searchArtLoading: false,

searchArtDone: false,

searchArtError: null

}

export const SALEART_REQUEST = "SALEART_REQUEST";

export const SALEART_SUCCESS = "SALEART_SUCCESS";

export const SALEART_FAILURE = "SALEART_FAILURE";

 

const ArtReducer = (state = initialState, action) => {

return produce(state, (draft) => {

switch (action.type) {

case SEARCHART_REQUEST:

draft.searchArtLoading = true;

draft.searchArtDone = false;

draft.searchArtError = null;

break;

case SEARCHART_SUCCESS:

draft.searchArtLoading = false;

draft.searchArtDone = true;

draft.searchArt = action.data.data;

break;

case SEARCHART_FAILURE:

draft.searchArtLoading = false;

draft.searchArtDone = true;

draft.searchArtError = action.data.error;

break;

default:

return;

}

});

};

react redux node.js express next.js

답변 1

0

제로초(조현영)

const result = yield call(ArtApi.getWordArt());

여기가 비어있으니 안 되는 겁니다.

action.result같은 속성을 만들어서 넘겨주세요.

0

김지현

넵, 감사합니다~!

넥스트 버젼 질문

0

78

2

로그인시 401 Unauthorized 오류가 뜹니다

0

89

1

무한 스크롤 중 스크롤 튐 현상

0

175

1

특정 페이지 접근을 막고 싶을 때

0

103

2

createGlobalStyle의 위치와 영향범위

0

96

2

인라인 스타일 리렌더링 관련

0

91

2

vsc 에서 npm init 설치시 오류

0

147

2

nextjs 15버전 사용 가능할까요?

0

158

1

화면 새로고침 문의

0

121

1

RTK에서 draft, state 차이가 있나요?

0

153

2

Next 14 사용해도 될까요?

0

452

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

349

1

url 오류 질문있습니다

0

211

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

373

1

sudo certbot --nginx 에러

0

1275

2

Minified React error 콘솔에러 (hydrate)

0

470

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

247

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

327

1

npm run build 에러

0

518

1

front 서버 npm run build 중에 발생한 에러들

0

382

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

338

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

288

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

239

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

201

1