没有可用的作业时无法显示状态

时间:2019-07-07 15:46:26

标签: react-native redux react-redux

我正在寻找工作。我的目标是根据用户的搜索查询通知用户何时没有可用的工作。我知道没有可用的作业时服务器会发送状态204。我的工作是在收到状态204时显示一条适当的消息,但我无法执行此操作。

我在fetchJobs()函数中尝试了多种方法来处理204状态。但是,它们都不起作用-我仍然从JobsComponent.js看到RenderJobs函数中的错误。

我的ActionCreator.js是这样的:

export const fetchJobs = (address, job) => async (dispatch) => {
    dispatch(jobsLoading());
    var addressObj = JSON.parse(JSON.stringify(address));
    var obj = {"origin": [addressObj.lng, addressObj.lat], "job_details": [job]};
    const apiUrl = baseUrl + 'api/jobs/available_jobs';
    return fetch(apiUrl, {
    method: 'POST',
    body: JSON.stringify(obj),
    headers:{
    'Content-Type': 'application/json'
  }
})
    .then(response => {
    if (response.ok && response.status == 200) {
      return response;
    }
    else if (response.ok && response.status == 204) {
       dispatch(noJobsAvailable());
       return;
    }
    else {
      var error = new Error('Error is: ' + response.status + ': ' + response.statusText);
      error.response = response;
      throw error;
    }
  },
      error => {
            var errmess = new Error(error.message);
            throw errmess;
      })
    .then(response => response.json())
    .then(jobs => dispatch(addJobs(jobs)))
    .catch(error => dispatch(jobsFailed(error.message)));
};

export const noJobsAvailable = () => ({
    type: ActionTypes.NO_JOBS_AVAILABLE
});

这是我的减速器

import * as ActionTypes from '../ActionTypes';

const initialState = {
    jobs: [],
    isLoading: true,
    noJobs: false,
    errMess: null
  };

export const jobs = (state = initialState, action) => {
    switch (action.type) {
        case ActionTypes.GET_JOBS:
            return {...state, isLoading: false, noJobs:false, errMess: null, jobs: action.payload};

        case ActionTypes.JOBS_LOADING:
            return {...state, isLoading: true, noJobs:false, errMess: null, jobs: []}

        case ActionTypes.NO_JOBS_AVAILABLE:
            return {...state, isLoading: false, noJobs: true, errMess: null, jobs: []}

        case ActionTypes.JOBS_FAILED:
            return {...state, isLoading: false, noJobs:false, errMess: action.payload};

        default:
          return state;
      }
};

这是JobsComponent.js中的RenderJobs函数:

function RenderJobs(props) {
    var json = JSON.parse(props.jobsData);
    //create a sorted array based on 'json', called sort_array
    const renderJobItem = ({item}) => {
        //process the API response for displaying it
        return (
        //component for displaying the API response
    }

if (props.isLoading) {
    return (
            <Loading /> //custom loading component
    );
}
else if (props.noJobs) {
    return (
        <View style={styles.errorView}>
        <Text style={styles.errorTextStyle}>No jobs available</Text>                                           
    </View>
    )
}
else if (props.errMess) {
    return(
        <View style={styles.errorView}>
            <Text style={styles.errorTextStyle}>An error occurred</Text>
        </View>
    );
}
else {
    return (
        <FlatList 
                data={sort_array}
                renderItem={renderJobItem}
                keyExtractor={(item, index) => index.toString()}
                style={{marginTop: 10}}
                />
    );
}

}

当前发生的情况是

  1. 第一次调用JobsComponent.js中的RenderJobs函数时,props.noJobs标志为 true ,props.errMess为 null

  2. 第二次调用我的RenderJobs函数时,props.noJobs标志为 false 和props.errMess-“ undefined不是对象(评估'response.json' )”

我不明白为什么会发生步骤2。我希望通话在步骤1结束。

如果有人能帮助解决这一难题,我将非常感激。 :)

0 个答案:

没有答案