つまり、州というよりイベントのようなものです。
そうは思いません。読み込みインジケーターは、状態の関数として簡単に説明できる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()
、React Reduxから使用してストアの状態をサブスクライブし、戻り値の一部として返さ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に慣れていて、より扱いやすくしたい副作用が散在しているという本当の問題がある場合のみにしてください。