在React

时间:2017-10-03 07:12:49

标签: reactjs redux fetch redux-thunk

我向后端onClick提交删除请求,当我从服务器获得响应时,我尝试调用调度函数来更新Redux存储。后端数据可以有效地删除请求;但是,当我包含调度调用时,React给了我这个错误:

  ./src/actions/questions.js
  Line 68:  'dispatch' is not defined  no-undef

我已经尝试了大量不同的语法和.then组合收到响应但没有任何作用。这让我感到困惑,因为在我做的thunk fetch调用中,我能够在得到响应时调用dispatch。我无法使用传统的thunk语法,因为它不会触发请求,因为它最初是在组件中的onClick事件中触发的。因此,我正在制作的删除提取请求如下所示:

 export function deleteQuestion(questionId, routerHistory) {
     return fetch(`${API_URL}/questions/${questionId}`, {
         method: 'DELETE',
     }).then(res => 
     dispatch(removeQuestion(questionId)))
   }

我考虑过只在方法之外调度removeQuestion,但后来我担心Redux存储会与后端数据不同步并导致以后出现问题。我非常感谢任何人都能提供的见解。我不认为删除项目和更新Redux商店应该是如此具有挑战性。

这也是github:https://github.com/jwolfe890/react_project1/blob/master/stumped-app-client/src/actions/questions.js

再次感谢你。

2 个答案:

答案 0 :(得分:0)

您的语法已关闭。 thunk将返回一个以dispatch为参数的函数。 dispatch将由中间件传入。因此,您的行动创建者应如下所示:

export function deleteQuestion(questionId, routerHistory) {
  return (dispatch) => {
    fetch(`${API_URL}/questions/${questionId}`, {
      method: 'DELETE',
    }).then(res => {
      dispatch(removeQuestion(questionId))
    })
  }
}

答案 1 :(得分:0)

deleteQuestion函数中查看问题,既没有定义dispatch,也没有通过dispatch作为函数的参数。所以你收到错误dispatch is not defined

redux-thunk中,您返回一个函数,该函数以dispatch作为参数,由redux-thunk中间件提供。这就是它完美运作的原因。