【发布时间】:2022-01-25 05:22:53
【问题描述】:
我正在尝试创建一个既不是组件也不是可在特定事件上调用的挂钩的函数。假设我有一个使用 axios 发布数据的简单功能,并且我想在发布成功后使用导航。这是示例
export const authLogin = (email, password) => {
const config = {
withCredentials: true,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': Cookies.get('csrftoken')
}
}
let navigate = useNavigate();
return dispatch => {
console.log('Masuk ke dalam auth file');
dispatch(authStart());
axios.post('/log_in/', {
email: email,
password: password
}, config)
.then(res => {
if (res.data.error) {
alert(res.data.error)
dispatch(authFail(res.data.error))
}
else {
const token = res.data.key;
const expirationDate = new Date(new Date().getTime() + 3600 * 1000);
localStorage.setItem('token', token);
localStorage.setItem('expirationDate', expirationDate);
dispatch(authSuccess(token));
dispatch(checkAuthTimeout(3600));
alert('login berhasil')
navigate("/", { replace: true });
}
})
.catch(err => {
alert(err);
dispatch(authFail(err))
})
}
}
【问题讨论】:
-
就像它说的那样,只能在功能组件中使用钩子或其他钩子......为什么不将调用者设为钩子并从功能组件中调用它呢?否则,从你的函数中删除所有钩子调用并像普通函数一样使用它,不能同时使用:)
-
请创建一个minimal reproducible example,特别包括调用函数的地方。请注意,钩子和组件都不是由它们的命名方式决定的,而是由它们的使用方式决定的。
标签: javascript reactjs react-hooks