Reactjs 使用'分配专门用于实体创建的Redux状态是否是一种良好做法;火与遗忘';应用程序编程接口?
在一些博客视频等中,有一个关于Redux的CRUD教程 它们中没有一个(冲浪后的AFAIK)在服务器上处理完全异步的API,比如点火忘记行为。Reactjs 使用'分配专门用于实体创建的Redux状态是否是一种良好做法;火与遗忘';应用程序编程接口?,reactjs,asynchronous,redux,architecture,cqrs,Reactjs,Asynchronous,Redux,Architecture,Cqrs,在一些博客视频等中,有一个关于Redux的CRUD教程 它们中没有一个(冲浪后的AFAIK)在服务器上处理完全异步的API,比如点火忘记行为。 在CQRS环境中,主命令经常处理此类火灾并将其遗忘 让我们以一个虚构的Twitter为例来轻松了解这个想法: 基本上,在同步CRUD API的上下文中,您可能有: 重复操作:发布TWEET 服务器API:在响应数据中返回整个创建的tweet 状态:TweetReducer探索并存储响应中创建的tweet数据 用户界面:直接从tweet状态收听新twee
在CQRS环境中,主命令经常处理此类火灾并将其遗忘 让我们以一个虚构的Twitter为例来轻松了解这个想法: 基本上,在同步CRUD API的上下文中,您可能有:
- 重复操作:发布TWEET
- 服务器API:在响应数据中返回整个创建的tweet李>
- 状态:TweetReducer探索并存储响应中创建的tweet数据
- 用户界面:直接从tweet状态收听新tweet李>
- 重复操作:发布TWEET
- 服务器API:在响应中仅返回tweet的id(例如位置)李>
- 状态:TweetReducer不处理创建,因为在触发成功操作时,tweet不可用。
因此,一个新的Redux状态专用于处理tweet创建,标记为TweetCreation,通常拥有以下属性:(
)。data:{id:string},inProgress:boolean,errors:[]
然后,它将在数据中获取新创建的tweet的id,并允许UI监听此状态(TweetCreation)李> - UI:监听
状态,因此显示tweet已发送,甚至在某个时间间隔尝试获取服务器以获取完整的tweetTweetCreation
TweetCreation
更改为数组,以防用户在确认第一条tweet之前发出第二条tweet
因此,您的形状将如下所示:{pendingTweets:[],confirmedTweets:[]}
在POST_TWEET
中,您将新TWEET附加到pendingTweets
在
SET_TWEET\u ID
中,从pendingTweets
中删除匹配的TWEET,并将其推送到confirmedTweets
在组件中,您可能会执行类似于confirmedTweets.concat(pendingTweets.map(…)
的操作
2.对挂起的tweet使用相同的状态
形状将是{tweets:[]}
在POST_TWEET
中,将新TWEET附加到tweets
在
SET_TWEET\u ID
中,您可以在tweets
中更新匹配的TWEET
在您的组件中,您可以tweets.map(…)
结论
对挂起的tweet使用相同的状态似乎是一种更简单(因此更好)的方法
其他注意事项(对于两种方法)
- 我省略了更新时避免直接状态突变的细节,因为这是非常基本的
- 您可能需要为挂起的tweet生成一个临时id并将其从服务器发回,以便在
中找到匹配的tweetSET\u tweet\u id
- 临时id可以使用不同的对象键(或使用附加标志),以便您可以区分组件中的挂起和确认推文(例如,在挂起推文旁边呈现加载图标)
- 将
替换为[]
,使用id作为对象键可能更好(具体取决于具体要求),但这不是这个问题的重点{}