#reactjs #authentication #error-handling #axios #react-hooks
#reactjs #аутентификация #обработка ошибок #axios #реагирующие хуки
Вопрос:
Я пытаюсь реализовать аутентификацию пользователя в Context.js
import React, {useState} from 'react'
import config from './config/config'
import axios from 'axios'
const Context = React.createContext()
function ContextProvider({children}) {
const authenticate = async (email, password) => {
let e = null;
axios.post(
`${config.url}/auth/login`,
JSON.stringify({email, password}),
{ headers: { 'Content-Type': 'application/json' } }
).then(function (response) {
//save token
//save user
//redirect to app home
}).catch( error => {
e = error
})
return e
}
return(
<Context.Provider value={{authenticate}}>
{children}
</Context.Provider>
)
}
export {ContextProvider, Context}
а затем вызываете его с помощью useContext Hook в Login.js компонент.
export default function Login() {
const context = useContext(Context)
const [errors, setErrors] = useState(null)
const [email, setEmail] = useState("")
const [password, setPassword] = useState("")
const loginUser = (e) => {
e.preventDefault();
const axiosErrors = context.authenticate(email, password)
console.log(axiosErrors)
Хотя я могу фиксировать ошибки / в блоке catch { console.log (e) } вызова axios, я не могу фиксировать их в Login.js .
Таким образом, приведенный выше console.log записывает на консоль следующее:
{axiosErrors: Promise}
POST http://localhost:7000/api/auth/login 401 (Unauthorized)
Комментарии:
1. Почему бы вам не попробовать / поймать в своем компоненте входа в систему? Затем вы можете обрабатывать состояние ошибки в блоке catch
2. @tmhao2005 спасибо за идею, я мог бы это сделать. Есть ли какой — нибудь другой способ сделать это ?
3. Или вы также можете попробовать / поймать в
authenticate
самом себе, тогда вы бы вернули статус false. Затем вы просто получаете результат функции в своемLogin
компоненте, не выполняя здесь try / catch. Единственное место, которое нужно попробовать / поймать, если вы идете на это дело