내 말은 그들이 상태 라기보다는 사건에 가깝다는 뜻이다!
나는 그렇게 말하지 않을 것입니다. 로드 인디케이터는 상태의 함수로 쉽게 설명되는 UI의 훌륭한 사례라고 생각합니다.이 경우 부울 변수입니다. 이 대답 은 정확 하지만 함께 사용할 코드를 제공하고 싶습니다.
async
Redux repo 의 예제에서 reducer 는 다음 필드를 업데이트합니다isFetching
.
case REQUEST_POSTS:
return Object.assign({}, state, {
isFetching: true,
didInvalidate: false
})
case RECEIVE_POSTS:
return Object.assign({}, state, {
isFetching: false,
didInvalidate: false,
items: action.posts,
lastUpdated: action.receivedAt
구성 요소 용도 connect()
돌아 오는 반작용에서이 가게의 상태에 가입하는 수익률 isFetching
의 일부로 mapStateToProps()
반환 값 은 연결된 기기의 소품에서 사용할 수 있도록 :
function mapStateToProps(state) {
const { selectedReddit, postsByReddit } = state
const {
isFetching,
lastUpdated,
items: posts
} = postsByReddit[selectedReddit] || {
isFetching: true,
items: []
}
return {
selectedReddit,
posts,
isFetching,
lastUpdated
}
}
마지막으로, 컴포넌트 는 함수 isFetching
에서 prop을 사용render()
하여 "Loading ..."레이블을 렌더링합니다 (대신 스피너 일 수 있음).
{isEmpty
? (isFetching ? <h2>Loading...</h2> : <h2>Empty.</h2>)
: <div style={{ opacity: isFetching ? 0.5 : 1 }}>
<Posts posts={posts} />
</div>
}
더 나쁜 경우에는 redux / react 앱에서 기본 확인 대화 상자 또는 경고 대화 상자를 사용해야 할 때 어떻게해야합니까? 그들은 어디에 넣어야합니까, 행동 또는 감속기?
모든 부작용 (및 대화 상자 표시는 가장 확실한 부작용)은 리듀서에 속하지 않습니다. 감속기를 수동적 인 "상태 구축 자"라고 생각하십시오. 그들은 실제로 일을 "행"하지 않습니다.
경고를 표시하려면 작업을 디스패치하기 전에 구성 요소에서 수행하거나 작업 생성자에서 수행하십시오. 조치가 전달 될 때까지 이에 대응하여 부작용을 수행하기에는 너무 늦습니다.
모든 규칙에는 예외가 있습니다. 때로는 부작용 로직이 너무 복잡해서 실제로 특정 액션 유형이나 특정 리듀서에 연결 하고 싶을 때가 있습니다 . 이 경우 Redux Saga 및 Redux Loop 와 같은 고급 프로젝트를 확인하십시오 . 바닐라 Redux에 익숙하고 더 관리하기 쉽게 만들고 싶은 흩어진 부작용의 실제 문제가있는 경우에만이 작업을 수행하십시오.