이 작업을 수행하는 가장 좋은 방법은 액션 제작자와 몇 가지 변수에 Promises
을 사용하는 것입니다.
변수는, isLoaded
아마도과 같이 구성 요소에 사용되는 말 :
이
{
this.props.isLoaded ? <MyComponent /> : <StillLoadingComponent />
}
액션 창조자에서 당신은 다음 Promise
방식으로 API 호출이 데이터를 얻을 수 있도록 것입니다. 이 체크 Promise
then
의 일부
데이터가 수신되었는지가
그렇다면,
true
에
isLoaded
속성을 변경한다
IS_LOADED
유형의 작용을 전달. 그래서 같은
state = {
isLoaded: false,
data: null
}
예는 것이 무엇인가 :
당신의 초기 상태 (Initial) 이런 식으로 뭔가를해야만라고 가정
MyComponent.js
...
render() {
if (!this.props.isLoaded) {
return (
<Loader />
);
}
else {
return (
<div>
<h2>{this.props.actualData}</h2>
</div>
);
}
}
...
MyComponentContainer.js
...
const mapStateToProps = state => ({
isLoaded: state.isLoaded
actualData: state.data
});
...
ComponentActions.JS
이는 thunk
로 사용되는, 그래서 우리는 지금처럼 쓰기 :
...
// I am not including getState deliberately
const loadData = valueToGet => dispatch {
//Fetch the data using axios or isomorphic-fetch
fetch('some/url' + valueToGet)
.then(res => res.json())
.then(actualData => {
dispatch({
type: IS_LOADED,
payload: actualData
})
})
}
...
ComponentReducer.js
...
case IS_LOADED:
return newState = {
...state,
isLoaded: true,
data: action.payload
}
...
하면 데이터에 대한 요청을하고있다? – Geraint
안녕하세요, 코드에 실수가 있습니다. 전체 구성 요소를 추가 할 수 있습니까? – Dkouk
@Geraint 구성 요소가 라우터 내부에 약간의 레벨로 침투합니다. 일단 경로 매개 변수가 있으면 해당 데이터를 호출합니다. – ilyo