如何使用 react redux 正确调度 axios 删除

Posted

技术标签:

【中文标题】如何使用 react redux 正确调度 axios 删除【英文标题】:How to properly dispatch an axios delete with react redux 【发布时间】:2022-01-24 00:30:30 【问题描述】:

我正在尝试在删除请求后刷新状态。正确的 id 正在被删除,但它根本没有刷新状态,因为操作负载是空的。以下是我当前的代码。

actions\index.js

...
function deleteCustomerSucceeded(customer)
    return
        type:"DELETE_CUSTOMER_SUCCEEDED",
        payload:
           customer
        
    


export function deleteCustomer(id)
    return(dispatch) =>
        api.deleteCustomer(id).then((res) => 
            dispatch(deleteCustomerSucceeded(res.data))
        )
    
...

reducers\index.js

...
    case 'DELETE_CUSTOMER_SUCCEEDED':
        return
            ...state,
            customers: state.customers.filter(customer => customer.id !== action.payload)
        
    
...

api\index.js

export function deleteCustomer(id)
    return client.delete(`/customers/$id`)

myview.js

  deleteCustomer()
      let state = submitted: true
      this.props.onDeleteCustomer(this.state.customer.id)
      state = 
        ...state,
        customer: this.emptyCustomer,
        deleteCustomerDialog: false
    
    this.setState(state)
  

如果需要进一步澄清或您可能需要查看任何其他代码来帮助回答此问题,请告诉我。

【问题讨论】:

有效载荷可能为空,因为删除端点没有返回任何数据,因此res.data 将为空。您可以做的不是将res.data 作为参数传递给deleteCustomerSucceeded 动作创建者,而是可以传入id 参数:dispatch(deleteCustomerSucceeded(id)) @Kapobajza 帮助我解决了这个问题。我以为你必须从成功中获得 res.data,但现在我看到我可以使用 res 来完成它,只需将我需要的数据传递给它。换掉东西后,我得到了它的工作,非常感谢我花了太多时间来解释为什么它不起作用,现在答案似乎很明显,为什么它会空空如也。非常感谢! 【参考方案1】:

在 Kapobajza 回答后,我对代码进行了这些更改以使其正常工作。

reducers\index.js

    case 'DELETE_CUSTOMER_SUCCEEDED':
        return
            ...state,
            customers: state.customers.filter(customer => customer.id !== action.payload.id)
        
         
    

actions\index.js

function deleteCustomerSucceeded(id)
    return
        type:"DELETE_CUSTOMER_SUCCEEDED",
        payload:
           id
        
    


export function deleteCustomer(id)
    return(dispatch) =>
        api.deleteCustomer(id).then((res) => 
            dispatch(deleteCustomerSucceeded(id))
        )
    

【讨论】:

以上是关于如何使用 react redux 正确调度 axios 删除的主要内容,如果未能解决你的问题,请参考以下文章

使用 React-Router 和 Redux 时单击链接时如何调度操作?

如何使用 redux-thunk 调度操作让 connected-react-router 重定向?

在React / Redux中,如果函数组件正在使用redux-thunk调度函数,则如何setIsLoading()?

动作调度不更新 Redux/React 中的状态

来自根组件的 React/Redux 调度操作?

在 react js 功能组件中调度操作后如何立即在 redux store 中使用更新的值