在几个博客视频等中,有一个使用Redux的CRUD教程。
他们都没有(冲浪后的AFAIK)在服务器上处理完全异步API,例如即发即弃行为。
CQRS 环境中的主要命令经常处理那些即发即弃的问题。
让我们通过Twitter的一个虚构示例来轻松获得这个想法:
基本上,在同步 CRUD API 的上下文中,您可能有:
除了经典的提取API之外, TweetReducer 可以完全处理 POST_TWEET 操作,因为它可以直接包含新的推文。
但是,在服务器上发生了“即发即弃”API的情况下:
data: {id: string}, inProgress: boolean, errors: []
)。TweetCreation
状态,因此会显示发送推文,甚至尝试按某个时间间隔获取服务器以获取完整的推文。有些人尝试在Redux商店添加另一个状态来处理即发即弃的API ,这是一个好习惯吗?
是"传统"在社区还是有另一种聪明的方式?
答案 0 :(得分:1)
首先,您需要将TweetCreation
更改为数组,以防用户在确认第一条推文之前发送第二条推文。
所以你的形状看起来像这样:{ pendingTweets: [], confirmedTweets: [] }
。
在POST_TWEET
中,您将新推文附加到pendingTweets
在SET_TWEET_ID
中,您从pendingTweets
中移除匹配的推文并将其推送到confirmedTweets
。
在您的组件中,您可能会执行confirmedTweets.concat(pendingTweets).map(...)
。
形状只是{ tweets: [] }
。
在POST_TWEET
中,您将新推文附加到tweets
在SET_TWEET_ID
中,您可以在tweets
更新匹配的推文。
在您的组件中,您执行tweets.map(...)
。
对待处理的推文使用相同的状态似乎是一种更简单(因此更好)的方法。
SET_TWEET_ID
中找到匹配的推文。[]
{}
可能会更好(取决于具体要求),但这不是此问题的重点。