Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Redux、Fetch和在何处使用.map_Json_Reactjs_Redux_Fetch_Redux Thunk - Fatal编程技术网

Json Redux、Fetch和在何处使用.map

Json Redux、Fetch和在何处使用.map,json,reactjs,redux,fetch,redux-thunk,Json,Reactjs,Redux,Fetch,Redux Thunk,考虑这个场景: 应用程序加载=>从api获取json=>需要修改返回的json 在本例中,我使用moment进行一些日期修改,并进行一些分组,我将在UI中使用这些分组。我查看了一下堆栈,发现了一个清晰的示例,但并没有感觉到它提供了我所寻求的清晰性 我应该在哪里使用.map来创建包含格式化日期和分组日期的新对象?在分派之前,我应该在api调用或redux操作中操纵原始json吗?最佳做法是什么 可以添加属性并改变对象吗,如我下面所示, service[“mStartDate”]=mStartDat

考虑这个场景:
应用程序加载=>从api获取json=>需要修改返回的json

在本例中,我使用moment进行一些日期修改,并进行一些分组,我将在UI中使用这些分组。我查看了一下堆栈,发现了一个清晰的示例,但并没有感觉到它提供了我所寻求的清晰性

  • 我应该在哪里使用.map来创建包含格式化日期和分组日期的新对象?在分派之前,我应该在api调用或redux操作中操纵原始json吗?最佳做法是什么

  • 可以添加属性并改变对象吗,如我下面所示,
    service[“mStartDate”]=mStartDate
    在我将数据放入存储并将其视为不可变状态之前

  • 第一种方法-在api调用中更改原始json

    第二种方法,进行简单的api调用

    在分派之前更改操作中的json


    所有数据操作都应该由减速器处理。也就是说,返回的响应数据应该传递给reducer。这种做法很常见,因为这样,如果您的数据有问题,您将始终知道在哪里查找。所以你的两种方法都不“正确”。操作应该只接受一些输入并分派一个对象(没有数据操作)

    当您只为“视图”目的操作数据时,考虑使用库,这使得处理由现有数据组成的“数据视图”更容易。

          class TicketRepository extends BaseRepository {
            getDataByID(postData) {
              return this.post('api/lookup', postData)
              .then(result => {
                const groupedData = {}
                  return result.map(ticket => {
                      const mStartDate = moment(ticket.startDate)
                      const mEndDate = moment(ticket.endDate)            
                      const serviceLength = mStartDate.diff(mEndDate,'hours')
                      const duration = moment.duration(serviceLength,"hours").humanize()
                      const weekOfYear = mStartDate.format('WW')
                      const dayOfWeek = mStartDate.format("d")
    
                      if(!groupedData.hasOwnProperty(weekOfYear)){
                        groupedData[weekOfYear] = {}
                      }
    
                      if (!groupedData[weekOfYear].hasOwnProperty(dayOfWeek)) {
                      groupedData[weekOfYear][dayOfWeek] = []
                      }            
    
                      service["mStartDate"] = mStartDate
                      service["mEndDate"] = mEndDate
                      service["serviceLength"] = serviceLength
                      service["duration"] = duration
                       groupedData[weekOfYear][dayOfWeek].push(service)
                    })                    
              })
            }
          }
    
      class TicketRepository extends BaseRepository {
        getDataByID(postData) {
          return this.post('api/lookup', postData)
        }
      }
    
        export function getDataByID() {
          return (dispatch, getState) => {
            dispatch(dataLookupRequest()) 
            const state = getState()
    
            const groupedData = {}
            return TicketRepository.getDataByID(userData)
              .then(result => {
                const groupedData = {}
                  return result.map(ticket => {
                      const mStartDate = moment(ticket.startDate)
                      const mEndDate = moment(ticket.endDate)            
                      const serviceLength = mStartDate.diff(mEndDate,'hours')
                      const duration = moment.duration(serviceLength,"hours").humanize()
                      const weekOfYear = mStartDate.format('WW')
                      const dayOfWeek = mStartDate.format("d")
    
                      if(!groupedData.hasOwnProperty(weekOfYear)){
                        groupedData[weekOfYear] = {}
                      }
    
                      if (!groupedData[weekOfYear].hasOwnProperty(dayOfWeek)) {
                      groupedData[weekOfYear][dayOfWeek] = []
                      }            
    
                      service["mStartDate"] = mStartDate
                      service["mEndDate"] = mEndDate
                      service["serviceLength"] = serviceLength
                      service["duration"] = duration
                       groupedData[weekOfYear][dayOfWeek].push(service)
                    })
                    return groupedData   
              })
              .then(groupedData => {
                dispatch(lookupSuccess(groupedData))
              })
              .catch(err => dispatch(dataLookupFailure(err.code, err.message)))
          }
        }