【发布时间】:2016-07-25 15:17:58
【问题描述】:
我在内部遇到了一个问题,即如何构建通过 rest api 获取数据的 redux 操作。
我正在获取各种数据,例如
- 所有帖子已发布
- 一个奇异的帖子
- 所有当前用户
- 搜索结果
我想知道我是创建一个从每个端点获取数据的操作,还是创建一个从提供的路由获取数据的单一提取操作?
当前实施:
function requestPosts(site) {
return {
type: REQUEST_POSTS,
site
}
function fetchPosts(site) {
return dispatch => {
dispatch(requestPosts(site))
return fetch(`http://notareallink.com/posts`)
.then( response => response.json() )
.then( json => dispatch( receivePosts( site, json ) ) )
}
function requestPost(site) {
return {
type: REQUEST_POST,
site
}
function fetchPost(site) {
return dispatch => {
dispatch(requestPost(site))
return fetch(`http://notareallink.com/post/post-id`)
.then( response => response.json() )
.then( json => dispatch( receivePost( site, json ) ) )
}
function requestUsers(site) {
return {
type: REQUEST_USERS,
site
}
function fetchUsers(site) {
return dispatch => {
dispatch(requestUsers(site))
return fetch(`http://notareallink.com/users`)
.then( response => response.json() )
.then( json => dispatch( receiveUsers( site, json ) ) )
}
对我来说,这感觉就像一堆重复的代码基本上在做同样的事情(从端点获取数据)。
这是正确的方法吗,还是我应该创建一个单独的操作来获取数据并将其传递给相关路由?
如果这不是很清楚,我很抱歉,但我在输入此内容时试图绕开这个问题。
【问题讨论】:
-
我认为重复不是多个操作,而是您重复的 API 调用例程。您可以尝试的一件事是将
fetch().then().then()抽象到 API 模块中,这样您的动作创建者将只调用该函数而不是一遍又一遍地编写相同的行。
标签: javascript reactjs redux react-redux