アクションクリエイターと変数にPromises
を使用することをお勧めします。
変数、isLoaded
はおそらくそうのように、部品に使用されるだろうと言う:あなたのアクションの作成者で
{
this.props.isLoaded ? <MyComponent /> : <StillLoadingComponent />
}
あなたは、あなたのデータを取得するためにPromise
ファッションでAPI呼び出しを作ると思います。
そうであればデータを受信した場合には、このPromise
チェックのthen
一部において、true
にisLoaded
特性を変化させるタイプIS_LOADED
のアクションをディスパッチします。
あなたの初期状態は、このように気にいらないと仮定すると:
state = {
isLoaded: false,
data: null
}
例がそうのようになります。
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