简体   繁体   English

上下文 API 状态未更新

[英]Context Api state not updating

Hey I have this function in AuthContext.js嘿,我在 AuthContext.js 中有这个功能

    let [authTokens, setAuthTokens] = useState(null)
    let [user, setUser] = useState(false)
    let [failedlogin, setFailedlogin] = useState(false)

    let loginUser = async (e) => {
        e.preventDefault();
        let response = await fetch(URL, {
            method:'POST',
            headers:{
                'Content-Type': 'application/json'
            },
            body:JSON.stringify({'email':e.target.email.value, 'password':e.target.password.value})
        })
        let data = await response.json()
        if(response.ok) {
            setAuthTokens(data)
            localStorage.setItem('authTokens', JSON.stringify(data))
            setUser(true)
            router.push('/dashboard')
        } else {
            setFailedlogin(true)
        }
    }

Then in a differnet component im using it like so然后在一个不同的组件中我像这样使用它

import { StyledLogin } from "./Styles/Login.Styles.Js"
import Link from 'next/link'
import React, {useContext, useState, useEffect} from 'react'
import AuthContext from '../context/AuthContext'

const LoginComponent = () => {

  let { loginUser, failedlogin } = useContext(AuthContext);
  

  return (
    <StyledLogin>
      <div className="container">
        <div className="form-container">
          <form onSubmit={loginUser}>
            {failedlogin && <h1>Email or Password is incorrect</h1>}
            <div className="input-container">
              <input type="email" name="email" placeholder="Email" />
              <input type="password" name="password" placeholder="Password" />
            </div>
            <div className="login-button">
              <button>Sign In</button>
            </div>
          </form>
          <div className="create-account">
            <Link href="/signup">
              <button>Create Account</button>
            </Link>
          </div>
          <Link href="/forgot-password">
            <p className="forgot">Forgot your password?</p>
          </Link>
        </div>
      </div>
    </StyledLogin>
  );
}

export default LoginComponent

When the loginUser function runs it updates the states but in the second component the failedLogin doesn't changeloginUser函数运行时,它会更新状态,但在第二个组件中failedLogin不会改变

Im passing in all the states to contextData, the loginUser function user works as well but the failedlogin state doesnt get updated into the second component我将所有状态传递给 contextData,loginUser 函数用户也可以正常工作,但失败的登录状态没有更新到第二个组件中

The entire app is wrapped in the context api like so:整个应用程序被包装在上下文 api 中,如下所示:

import '../styles/globals.css'
import Layout from '../components/Layout'
import { AuthProvider } from '../context/AuthContext'

function MyApp({ Component, pageProps }) {
  return (
    <AuthProvider>
      <Layout>
        <Component {...pageProps} />
      </Layout>
    </AuthProvider>
  )
}

export default MyApp

可能您的“第二个组件”没有包含在同一个 ContextProvider 中或不在该提供者之外。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM