Redux 썽크로 시작하기

Sep 11, 2025
어떻게
Get started with Redux Thunk

주정부는 REDUX가 일반적으로 쌍으로 짝이있는 이유 인 반응 응용 프로그램의 큰 부분입니다. 이 데이터는 종종 요청 및 응답이 필요한 데이터베이스에서 발생합니다. 일부 응용 프로그램의 경우이 통신은 일정할 수 있습니다. 반응 구성 요소 내에서만 관리하려는 까다로운 것은 까다로울 수 있습니다.

이것은 또한 새로운 문제가 발생합니다. 천천히로드되거나 전혀로드되지 않으면 어떻게됩니까? 비동기 데이터를 다루는 모든 구성 요소는 이러한 시나리오를 처리하기 위해 논리를 포함해야합니다.

'썽크'는이 상황을 도울 수있는 개념입니다. 각 썽크는 다른 함수를 반환하는 함수입니다. 그 기능은 콜백과 같이 훨씬 나중에 나중에 호출 될 수 있습니다. 우리가 액션 객체 대신 썽크를 파견 할 수 있다면, 우리는 다른 이벤트에 대한 반응에 추가 논리를 추가 할 수 있습니다.

Redux 썽크는 파견 된 행동과 감속기 사이에 앉는 라이브러리입니다. 썽크가 전달되면 성공 또는 오류 이벤트와 같은 추가 작업을 파견하는 데 사용할 수있는 반환 된 함수로 일부 메소드를 전달합니다.

  • 20 훌륭한 jquery 플러그인

이 자습서에서는 썽크를 사용하여 JSON 파일이 아닌 서버에서 데이터를 가져 오는 데 도움이됩니다. 포토샵 - Redux에 의해 구동되는 사진 주석 응용 프로그램.

새로운 사이트 프로젝트를 얻었지만 간단하게 유지해야합니까? 여기에 우리 가이드가 있습니다 웹 사이트 빌더 웹 호스팅 서비스. 다른 파일과 파일 공유? 너를 가져 가라 클라우드 스토리지 권리.

파일을 다운로드하십시오 이 자습서의 경우.

01. 종속성을 설치합니다

Get started with Redux Thunk: Install dependencies

두 서버를 모두 실행하고 그 물건을 그들의 물건을 맡기십시오

이 프로젝트에는 두 개의 부분이 있습니다. 프런트 엔드 사이트 및 백 엔드 서버가 실행됩니다. 튜토리얼에서는 프런트 엔드에 초점을 맞추지만 사진을 가져 오기 위해 서버가 실행 중이 러 필요합니다. 프로젝트 파일을 다운로드하고 사이트 및 서버 모두에 대한 종속성을 설치하십시오. 둘 다를 위해 서버를 실행하고 백그라운드에서 실행 중입니다.

 / * 단자 내부 / 사이트 * /
& gt; 실
& gt; 원사 시작
/ * 하나의 터미널 내부 / 서버 * /
& gt; 실
& gt; 원사 시작 

02. 미들웨어 설정

Redux 썽크는 A. 미들웨어 - 조치와 감속기 사이에 자리 잡는 기능은 이러한 작업이 어떻게 작동하는지 변경할 수 있습니다. Redux는 전체 응용 프로그램을 다루는 여러 미들웨어 세트를 지원합니다. 상점이 생성 될 때 추가됩니다. 짓다 방법. 미들웨어 추가 Createstore. index.js 내의 방법.

 수입 {applymiddleware, 작성}
"Redux"에서;
"Redux-thunk"에서 썽크를 가져 오십시오.
[...]
Const Store = CreateStore (
뿌리rechucer,
짓다(
applymiddleware (썽크),
DevTools.
)
); 

03. 액션 크리에이터를 설정합니다

우리가 지금해야 할 첫 번째 일은 사진을 갤러리에로드하는 것입니다. 정기적 인 행동과 마찬가지로 비동기 통화가 취해질 다양한 상태에 대한 조치 크리에이터가 필요합니다. 대부분의 것들이 있습니다 스타트 , 성공 오류 행위. 이로 인해 Redux는 JavaScript가 바쁜 일을 알고 있습니다. 이내에 액션 / 사진 / 사진 .js. 이 다른 상태에 대해 세 가지 조치 크리에이터를 설정하십시오.

내보내기 const loadGalleryStart = () = & gt; ({ 유형 : load_gallery_start}); export const loadgallerysuccess =. 사진 = & gt; ({ 유형 : load_gallery_success, 사진 }); 수출 const loadGalleryError = () = & gt; ({ 유형 : load_gallery_error});

04. 로딩을 위해 썽크를 만듭니다

썽크는 액션 크리에이터와 똑같이 작동합니다. 우리는 여전히 반환 값을 파견하지만 이번에는 객체 대신 함수를 반환합니다. 이전에 설정 한 미들웨어는 반환 된 함수에 디스패치 메소드를 전달합니다. 이를 통해 초기 파견 후에 REDUX에 더 많은 조치를 보낼 수 있습니다. A.를 만드십시오 로드 갤러리 함수를 반환하는 메소드. 지금은 갤러리가 여전히로드되는지 표시 할 작업을 파견하도록합니다.

 수출 const loadGallery = () = & gt;
파견 = & gt; {
파견 (LoadGalleryStart ());
}; 

05. 서버에서 데이터를로드합니다

이제 우리는 처음부터 설정 한 서버에서 가져 오기 시작할 준비가되었습니다. 우리는 사용하여 이것을 할 수 있습니다 AXIOS. - 다른 브라우저에서 약속을 해결하기 위해 고안된 패키지. 수입 AXIOS. 그리고 사진에 대한 요청을하십시오 로드 갤러리 ...에 약속이 해결되면 성공 조치를 파견하고 오류 조치를 파견하지 않는 경우. 이를 통해 썽크의 구조가 완료되었습니다.

 "axios"에서 Axios 가져 오기;
[...]
AXIOS를 돌려주십시오
.get ( "http : // localhost : 3001 / 사진")
.then (응답 = & gt; 파견 (
LoadGallerySuccess (ResponseData)))
.catch (() & gt; 파견 (
loadGalleryError ())); 

06. 썽크를 파견하십시오

Get started with Redux Thunk: Dispatch the thunk

파견되지 않은 썽크는 쓸모없는 덩어리가 정크입니다.

썽크는 파견 될 때까지 아무 것도하지 않을 것입니다. 우리는 다른 행동과 같은 반응 구성 요소 내에서 그렇게 할 수 있습니다. 사진을로드하기까지 좋은 시간은 사용자가 주 갤러리를 볼 때입니다. 우리는 반응을 사용할 수 있습니다 ComponentDidmount. Lifecycle Method 갤러리를 확인한 후 갤러리를 확인한 후에는 이미로드되지 않았습니다. 이내에 구성 요소 / 컨테이너 / 갤러리 / 갤러리 .js. A를 파견하십시오 로드 갤러리 그것을 추가하여 조치 MapDispatchToProps. 그리고 그것을 불러 일으킨다 ComponentDidmount. ...에

 ComponentDidMount () {
if (! this.props.photosloaded) {
this.props.loadgallery ();
}
}
export const mapdispatchtoprops =
 파견 = & gt; ({
loadgallery : () = & gt;
파견 (LoadGallery ()),
}); 

07. 성공에 사진을 추가하십시오

Get started with Redux Thunk: Add photos on success

사진이 도착하면 갤러리 구성 요소로 전달됩니다.

사진이 서버에서 돌아 오면 우리는 load_gallery_success. 사진과 함께 행동하십시오. 우리는 이것을 국가로 얻을 필요가 있습니다. 사진 감속기. ~까지 감속기 / 사진 / 사진 .js. 성공 조치를위한 사례를 추가하십시오. 페이로드에는 모든 사진이 배열로 포함됩니다. 상태가 업데이트되면 사진 선택기가 표시 할 갤러리 구성 요소로 사진을 전달합니다.

 사례 load_gallery_success :
Return Action.photos; 

08. UI를 설정하십시오

현재 사진은 갑자기로드 된 후에 나타납니다. 느린 연결에서 사용자는 요청이 완료 될 때까지 빈 화면을보고 있습니다. 우리가 사진을로드하기 위해 보내는 동작은 무슨 일이 일어나는 일에 인터페이스를 최신 상태로 유지하기 위해 UI 감속기에서 픽업 할 수 있습니다. UI 감속기에서로드 및 오류 플래그를 업데이트하십시오. 감속기 / ui / ui.js. ...에

 사례 Load_Gallery_Error :
{... state,
로드 : 거짓, 오류 : true};
사례 load_gallery_start :
{... state,
로드 : True, Error : False};
사례 load_gallery_success :
{... state,
로드 : 거짓}; 

09.로드 및 오류 선택기를 추가하십시오

갤러리 사진들과 마찬가지로 다양한 UI 상태 값을 Redux에서 얻을 수있는 선택기가 필요합니다. 우리는 이들을 갤러리에 전달할 수 있습니다. 그러면 하나가 사실이라면 다른 요소를 렌더링 할 수 있습니다. 에 selectors / ui / ui.js 가치를 얻으려면 몇 가지 기능을 추가하십시오.

 내보내기 const isGalleryErrord =
 주 = & gt; state.ui.error;
수출 const isGalleryLoading =
 주 = & gt; state.ui.loading; 

10. GalleryContainer에 데이터를 추가합니다

선택기가 준비되어 있으면 이제는 이제 추가 할 수 있습니다. 갤러리 컨테이너 구성 요소. 여기에이를 추가하면 갤러리를 표시 할 책임이있는 구성 요소가 데이터가 어떻게 도착했는지 알 필요가 없습니다. ~까지 컨테이너 / 갤러리 / 갤러리 .js. 선택기를 추가합니다 MapStatetoprops. ...에 값이 다음 단계에서 상태를 표시하는 데 도움이되는 상수를 설정하십시오.

 const {오류, 로딩,
 사진}} =이 .props;
[...]
export const mapstatetoprops =.
 주 = & gt; ({
오류 : iSGalleryErrord (상태),
로드 : IsGalleryLoading (State),
 }); 

11. 로딩 및 오류 상태를 표시합니다

Get started with Redux Thunk: Show loading and error state

필요한 경우 오류 및로드 구성 요소가 나타나는지 확인하십시오.

우리가 오류와 적재 소품을 가지고있는 동안 현재 활성화시킬 때를 나타내는 UI가 없습니다. 이러한 소품은 부울 값이며, 이는 실제 일 때 구성 요소의 디스플레이를 전환 할 수 있음을 의미합니다. 렌더링 메서드를 업데이트하여 & lt; error & gt; & lt; 로딩 & gt; 필요한 경우 갤러리 대신 렌더링하는 구성 요소.

 (에러) {
리턴 & lt; 오류 / & gt ;;
}
if (loading) {
반환 & lt; 로딩 / & gt ;;
} 

12. 갤러리를 다시 가져옵니다

갤러리가로드되면 개별 사진으로 이동할 수 있습니다. 사진 중 하나를 클릭하고 페이지를 새로 고치는 것은 아직 갤러리를로드하지 않으므로 사진 백업을로드하지 않습니다. 열다 컨테이너 / 사진 / photo.js. 갤러리를로드하십시오 ComponentDidmount. 그와 같이 갤러리 구성 요소. 그만큼 찍은 사진 확인 갤러리에 이미로드 된 경우 사진을 다시로드하려고 시도하지 않습니다.

 if (! this.props.photosloaded) {
this.props.loadgallery ();
} 

13. 새 코멘트를 추가하십시오

Get started with Redux Thunk: Add a new comment

사용 addNewcomment. 댓글을 추가하기위한 Prop 기능

사용자는 자신이 코멘트를 남기고 싶은 사진을 클릭 할 수 있습니다. 사진 프리젠 테이션 구성 요소가 실행됩니다 addNewcomment. 이런 일이 발생하면 PROP 기능. 내부에서 addNewcomment. 기능은 사용자가 사진 내에서 클릭 한 지점을 계산합니다. 서버가 저장 될 때 서버에 둥근 정수 백분율 값이 필요합니다.

 Const Photo = e.target.
 .getBoundingClientRect ();
const top = e.clientx - photo.left;
const left = e.clienty - Photo.top;
const toppc = math.round ((top /
 photo.width) * 100);
const LeftPc = math.round ((왼쪽 /
 photo.height) * 100); 

14. 댓글에 대해 Redux에게 말하십시오

계산 된 위치가있는 경우 주석을 표시 할 수 있도록 댓글에 대해 Redux에게 알려야합니다. 화면에 새 주석을 추가하기 위해 이미 액션이 설정되어 있습니다. 더하다 addNewcomment. 으로 MapDispatchToProps. 클릭 후에 전화의 위치를 ​​계산 한 후에 전화하십시오.

 this.props.AddNewComment (
 toppc, leftpc);
[...]
export const mapdispatchtoprops =
 파견 = & gt; ({
addNewcomment : (맨 위, 왼쪽) = & gt;
파견 (AddNewcomment (맨 위, 왼쪽)),
});

15. 새로운 코멘트에 대해 사진을 말하십시오

새로운 코멘트 정보가 Redux로 전달되면 사진 프리젠 테이션 구성 요소로 전달해야합니다. 이렇게하면 해당 위치에 양식을 표시 할 수 있습니다. 찾기 GetNewcomment. 셀렉터, 그것을 추가하십시오 MapStatetoprops. 소품을 통과하십시오 & lt; Photo & gt; ...에

 내보내기 const mapstatetoprops =.
 (주, 소품) = & gt; ({
NewComment : GetNewComment (State),
});
& lt; 사진 [...] newcomment = {
 이 .props.newComment} / gt; 

16. 의견을 눌러 썽크를 호출하십시오

Get started with Redux Thunk: Call thunk in comment

사진에 코멘트를 추가하려면 썽크를 만드십시오.

이제 사진을 클릭하면 새 설명 양식이 표시됩니다. 이것은 자체 연결된 구성 요소입니다. 양식이 제출되면 A가 호출됩니다 제출 PROP 기능을 사용하고 통과됩니다. 이것은 우리가 만들 것인 썽크입니다. 개방 컨테이너 / 신규 / NewComment.js. 썽크를 추가하십시오 MapDispatchToProps. ...에 렌더링 된 프리젠 테이션 구성 요소로 전달하십시오.

& lt; newcomment [...] 제출 = {제출} / & gt; export const mapdispatchtoprops = 파견 = & gt; ({ 제출 : 댓글 = & gt; 급파( 제출 (코멘트))) });

17. 썽크에 대한 내용을 수집하십시오

새 주석을 추가하는 썽크는 시작, 성공 및 오류 조치를 포함하여 갤러리를 가져 오는 것과 비슷한 구조 를가집니다. 이 썽크에 전달 된 추가적인 논쟁이 있습니다 - 그네 함수. 이렇게하면 데이터를 잡으려면 현재 상태에 직접 액세스 할 수 있습니다. 그를 만드십시오 제출 티켓 행동 / 신규화 / newcomment.js. ...에 각 코멘트는 사진과 사용자와 연관됩니다. 이 자습서에서는 사용자 ID가 하드 코딩됩니다. 사용자 감속기.

 수출 Const 제출 = 의견
 = & gt; (파견, getState) = & gt; {
파견 (SubmitCommentStart ());
const 전류 사진 =
getCurrentHopphotooid (getState ());
const user =.
getCurrentuser (getState ());
const {left, top} =
getNewComment (getState ());
}; 

18. 요청을 게시하십시오

필요한 모든 데이터를 제자리에서 제출할 수 있습니다. Axios는 A를 가지고 있습니다 게시하다 거래하는 방법 게시하다 요청, 두 번째 인수가 해당 요청에 보낼 데이터가됩니다. 썽크에 요청을 추가하여 서버가 기대하는 것과 일치하도록 뱀 케이스의 데이터를 전달하십시오.

 AISIOS를 반환합니다
.게시하다(
"http : // localhost : 3001 / comments", {
user_id : user.id,
Photo_id : 현재 사진,
논평,
왼쪽,
상단
}) 

19. 성공과 오류를 처리하십시오

Axios의 약속이 해결되거나 거부되면 우리는 응용 프로그램에 대해 알려야합니다. 성공적으로 해결되면 서버가 주석의 내용을 되돌릴 것입니다. 우리는 성공 조치에 따라 그것을 전달해야합니다. 거부되면 오류 조치를 해고하십시오. 약속을 업데이트하십시오 그때 잡기 블록.

. (({데이터 : {
 ID, 댓글, 왼쪽, 맨 위}) = & gt;
급파(
SubmitCommentsuccess (
id, comment, left, top,
사용자, 전류 사진
)
)
.catch (() & gt; 파견 (
 SubmitCommentError ())); 

20. 사진에 코멘트를 추가하십시오

Get started with Redux Thunk: Add comment to photo

사진 감속기를 편집하여 코멘트가 즉시 표시됩니다

지금 당장 주석이 성공적으로 추가되면 화면에서 지워지지만 페이지가 새로 고쳐질 때까지 표시되지 않습니다. 우리는 사진 감속기를 업데이트하여 새 주석을 픽업하고 그 댓글 배열에 추가하여 나머지 부분처럼 표시 할 수 있습니다. 감속기 / 사진 / photos.js를 열고 액션을 처리하는 경우를 추가하십시오. 우리가 실수로 기존 상태를 돌리지 않도록 상태의 사본을 만듭니다.

 CASE SUBMIT_COMMENT_SUCCESS :
const {id, comment, top, left,
사용자, 광 iD} = Action.PayLoad;
const newstate = json.parse (
JSON.Stringify (상태));
const 사진 = newstate.find (
사진 = & gt; photo.id === Photoid);
Photo.ments.ments.push ({
ID, 댓글, 왼쪽, 상단, 사용자
});
NewState를 반환합니다. 

21. 다른 의견 숨기기

마지막으로, 다른 의견이 열려 있고 사용자가 새 주석을 추가하기를 원한다면 UI가 너무 어지럽 혀야합니다. 새 코멘트가 구성되면 댓글 상자를 숨기려면됩니다. 우리는 기존에 연결할 수 있습니다 add_new_comment. 그를 지우는 행동 헌법 값. ~까지 감속기 / ui / ui.js. 그 사건을 추가하십시오.

 경우 add_new_comment :
반환 {
...상태,
댓글 론 : undefined.
}; 

이 기사는 원래 Creative Web Design Magazine의 Issage 283에서 출판되었습니다. 웹 디자이너 ...에 여기 문제를 구입하십시오 또는 웹 디자이너를 구독하십시오 ...에

관련 기사:

  • 5 멋진 JavaScript Apis.
  • 재사용 가능한 반응 구성 요소를 개발하십시오
  • 최고의 JavaScript 프레임 워크 중 9 개

어떻게 - 가장 인기있는 기사

Smugmug Storefront를 설정하고 최적화하는 방법

어떻게 Sep 11, 2025

(이미지 크레디트 : Pexels에 Andre Furtado) 또한 간단한 웹 사이트 빌더도 최고의 클라�..


중력 스케치 사용 방법

어떻게 Sep 11, 2025

(이미지 크레디트 : 중력 스케치) VR 광고 소재를위한 디자인 및 모델링 도구 인 중력 스�..


오일 페인트에서 반짝이 눈을 만드는 방법

어떻게 Sep 11, 2025

눈은 성공적인 초상화의 가장 중요한 요소이지만, 많은 사람들이 그들을 올바르게 그릴 수 있도�..


3D 모델을위한 쉬운 포즈 기술

어떻게 Sep 11, 2025

나는 지난 몇 년 동안 애니메이션 디렉터였으며 많은 애니메이터와 함께 일했으며 그들이 자신의..


즐거운 소형화를 칠하는 방법

어떻게 Sep 11, 2025

미니어처 페인팅의 기원은 미니어처 작가들이 꿀벌과 아이보리에 수채화 물감에 절묘한 초상화�..


반응성있는 SVG에 대한 10 개의 황금 규칙

어떻게 Sep 11, 2025

무한히 확장 가능한 벡터 이미지, 작은 파일 크기 및 DOM과의 직접적인 통합을 포함하여 SVG의 많은..


POSTCSS-FlexBox로 복잡한 레이아웃을 빌드

어떻게 Sep 11, 2025

FlexBox는 CSS 부실을 줄이는 훌륭한 도구이며 소스 주문 및 정렬과 같은 것들을 다루기 위해 설탕이..


조각 및 페인트 변위지도를 결합하는 방법

어떻게 Sep 11, 2025

때로는 렌더링 시간에 다양한 변위 맵을 결합하는 것이 더 효율적입니다. 일반적인 예는 직물, 스..


카테고리