【问题标题】:React: Unhandled Rejection (TypeError): Cannot read property 'catch' of undefined反应:未处理的拒绝(TypeError):无法读取未定义的属性'catch'
【发布时间】:2021-02-17 10:28:55
【问题描述】:

我正在尝试使用 axios 在 react 中获取表单列表

这是函数

useEffect(() => {
        const fetchData = async () => {
            dispatch({ type: 'SET_STATE', payload: { loading: true } })
            const response = await axios

                .get(`${API_URL}/form`, {
                    userId: localStorage.getItem('userId'),
                    headers: {
                        authorization: localStorage.getItem('userId')
                    }

                })
            console.log(response)
                .catch((err) => {
                    if (err.response.status === 401) history.push('/login')
                    return dispatch({
                        type: 'SET_STATE',
                        payload: { loading: false, error: err.response.data.msg }
                    })
                })
            dispatch({
                type: 'SET_STATE', payload: {
                    data: response.data.form,
                    loading: false,
                },

            })
        }
        fetchData()
        return () => {
            dispatch({ type: 'SET_STATE', payload: { loading: true, error: '' } })
        }
    }, [])

这就是减速器

const initialState = {
    data: [],
    loading: false,
    error: '',
}
const formReducer = (state = initialState, action) => {
    switch (action.type) {
        case 'SET_STATE':
            return { ...state, ...action.payload }
        default:
            return state
    }

}

但我收到此错误:

未处理的拒绝(TypeError):无法读取未定义的属性“catch”

【问题讨论】:

  • 您正试图捕捉console.log() 的结果,但登录到控制台没有任何作用。您应该在任何地方使用await 语法或.then/.catch,不要混合使用它们。

标签: reactjs redux axios


【解决方案1】:

您通过在getcatch 之间添加console.log 破坏了承诺链。在then 中使用console.log,如下所示:

您还将async/awaitthen 混合使用。虽然,它会工作response 不会是你所期望的。只需使用then 链接即可。

useEffect(() => {
        const fetchData = () => {
           dispatch({ type: 'SET_STATE', payload: { loading: true } })
           axios
               .get(`${API_URL}/form`, {
                    ...
                })

                // add the console in then
                .then(response=>{
                   console.log(response))
                   dispatch({
                     type: 'SET_STATE',
                     payload: {
                       data: response.data.form,
                       loading: false,
                     }
                   })
                 })
                
                .catch((err) => {
                    ...
                })
            
        }
        fetchData()
        return () => {
            dispatch({ type: 'SET_STATE', payload: { loading: true, error: '' } })
        }
    }, [])

【讨论】:

  • 谢谢,我添加了一个 data.map 来获取结果,但我得到另一个错误:无法读取未定义的属性 'map'
  • @MounaSis 只需将您的调度添加到then。我更新了代码。
猜你喜欢
  • 2021-07-01
  • 2021-12-13
  • 2020-11-27
  • 2017-12-26
  • 2021-05-06
  • 2019-04-07
  • 2019-03-25
  • 2021-03-04
  • 2021-09-16
相关资源
最近更新 更多