私は、PartyDetails
というコンポーネントを持っています。これは、ajax呼び出しでデータを取得する必要があります。 ajaxリクエストの処理中にLoading
コンポーネントを表示します。このredux recomposeブランチのユースケースを処理するには、より良い方法がありますか?
データがロードされているかどうかを判断するには、ストアにアクセスする必要があります。この私のようなルックス向上させる方法である:
propSetter
がある
const enhance = compose(
propSetter,
lifecycleEnhancer,
loading,
)
export default enhance(PartyDetails)
:
const propSetter = connect((state) => {
const { party } = state
const { dataLoaded } = party
// for some reason state does not contain match, and I'm resorting to routing
const { routing: {location: { pathname }}} = state
const involvedPartyId = pathname.substring(pathname.lastIndexOf('/') + 1)
return { dataLoaded, involvedPartyId }
}, {loadParty})
とlifecycleEnhancer
は次のとおりです。
const lifecycleEnhancer = lifecycle({
componentDidMount() {
this.props.loadParty(this.props.involvedPartyId)
}
})
とloading
がある(この場合には、dataLoaded
が来ることに気づきます前のconnect
はpropSetter
で行われました):
データが取得された場合は、第2接続を使用してPartyDetails
の関連する小道具を取得しています。
私はちょうど数日前にrecompose
の学習を始めました。私の使用例に合った例は見つかりませんでした。上記は私がドキュメントを読んだ後に思いつき、他の記事に見られるいくつかの例です。
これを処理するにはどうすればよいですか?これはより良い方法で、おそらく2 connect
コールを必要とせずに行うことができますか?あなたが接続する1つに小道具にマッピング状態とディスパッチのためのすべてのロジックを記述することができ
私は接続する1つですべてを持っていなかった理由は、データの状態、最初に存在していないということですconnectが呼び出されます。あなたの例に欠けているものがありますか? – Geo
@Geoそれは実際問題ではありません。私の例では、最初のレンダーデータ変数は未定義です(その時点では存在しないため)、そのデータが必要でないところの 'Loading'コンポーネントをレンダリングします。 2番目のレンダリングでは、データがサーバからフェッチされるときに、 'PartyDetails'をレンダリングし、派生データを渡します – 1ven