我知道钩子只能在函数组件的主体内调用,但我想知道是否有办法从react-router@6
个操作函数中访问上下文数据.我有一个操作功能,处理用户登录表单过程.我想使用来自应用程序上下文的setCurrentUser
函数,以便使用从API返回的登录用户数据更新状态
export const AuthAction = async ({ request }) => {
const { setCurrentUser } = useAppContext()
const data = await request.formData()
const userData = {
email: data.get('email'),
password: data.get('password')
}
if (!userData.email || !userData.password) {
throw json(
{ message: 'Please provide all values' },
{ status: 400, statusText: 'Please provide all values' }
)
}
try {
const { data } = await axios.post('/api/auth/login', userData)
setCurrentUser(data)
return redirect('/')
} catch (error) {
return error.response.data.msg
}
}
AppContext.js
const AppContextProvider = ({ children }) => {
const [state, dispatchFn] = useReducer(reducer, initialState)
const setCurrentUser = (user) => {
dispatchFn({ type: 'SET_CURRENT_USER', payload: user })
}
return (
<AppContext.Provider value={{setCurrentUser}}>
{children}
</AppContext.Provider>
)
}
const useAppContext = () => {
return useContext(AppContext)
}
export { AppContextProvider, useAppContext }
我试图从我的操作函数内的应用程序上下文中获取setCurrentUser
函数,但得到错误:无效的钩子调用.我不知所措,我真的很感激你把我推向正确的方向.
我希望实现的是,在成功登录后,更新我的应用程序上下文与当前登录的用户信息.