在React to Rails API中发送Fetch删除请求的问题

时间:2017-10-02 11:22:24

标签: ruby-on-rails reactjs cors react-redux fetch

我能够很好地发送get和put方法,但令人惊讶的是我无法将Redux操作中的删除提取请求发送到我的Rails后端。这更令人困惑,因为在Postman我能够很好地击中Destroy路线。我已经搜索了所有修复,但没有找到任何有用的东西。我有一个onClick函数,它触发发送此请求的Redux操作:

 export const deleteQuestion = (questionId, routerHistory) => {
   return dispatch => {
     return fetch(`${API_URL}/questions/${questionId}`, {
       method: 'DELETE',      
     }).then(response => {
         dispatch(removeQuestion(questionId));
         routerHistory.replace(`/`);
     })
     .catch(error => console.log(error));
   };
 };

我已多次检查以确保语法和路线正常。 questionId也是正确的问题ID。但是,无论我做什么,Questions控制器中的Destroy方法都无法识别请求。我已经检查了Rails中的路由并且它存在。我没有收到任何错误,没有任何请求被发送到服务器,也没有返回任何内容,而不是在终端,控制台或任何东西。

这是Github帐户:https://github.com/jwolfe890/react_project1

我真的很感激任何人的见解。谢谢!

1 个答案:

答案 0 :(得分:1)

您的deleteQuestion方法返回一个匿名函数,其中dispatch参数似乎永远不会被调用(Calling code)。仅调用deleteQuestion,但不调用它返回的函数。

因为它是由点击处理程序调用的,我说你实际上想要这样的东西:

export const deleteQuestion = (questionId, routerHistory) => {   
  fetch(`${API_URL}/questions/${questionId}`, {
     method: 'DELETE',      
  }).then(response => {
     dispatch(removeQuestion(questionId));
     routerHistory.replace(`/`);
  })
  .catch(error => console.log(error));
};

或者,如果您想要返回承诺,您当然可以将其更改为:

export const deleteQuestion = (questionId, routerHistory) => {   
  return fetch(`${API_URL}/questions/${questionId}`, {
     method: 'DELETE',      
  }).then(response => {
     dispatch(removeQuestion(questionId));
     routerHistory.replace(`/`);
  })
  .catch(error => console.log(error));
};

如果你想动态注入调度函数,你可以保留原始代码,但是必须调用这样的方法:

deleteQuestion(this.state.question.id, history)(myDispatchMethod);