Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React:useState函数在通过上下文传递后不更新状态_Javascript_Reactjs_React Hooks_React Context - Fatal编程技术网

Javascript React:useState函数在通过上下文传递后不更新状态

Javascript React:useState函数在通过上下文传递后不更新状态,javascript,reactjs,react-hooks,react-context,Javascript,Reactjs,React Hooks,React Context,我创建了一个上下文,它传递这个useState()声明const[user,setUser]=useState(null)。在添加react上下文之前,useState()函数运行良好,我没有遇到任何问题。但是现在我已经在context react中声明了函数,它不再更新状态并返回null。我不确定我做错了什么 AppContext.js import React, { createContext, useState } from 'react'; export const AppConte

我创建了一个上下文,它传递这个useState()声明
const[user,setUser]=useState(null)。在添加react上下文之前,useState()函数运行良好,我没有遇到任何问题。但是现在我已经在context react中声明了函数,它不再更新状态并返回null。我不确定我做错了什么

AppContext.js


import React, { createContext, useState } from 'react';

export const AppContext = createContext();

export const AppProvider = ({ children }) => {
  
  //user state declared with useState()
  const [user, setUser] = useState(null); 
  
  return (
    <AppContext.Provider value={{user, setUser}}>
      {children}
    </AppContext.Provider>  
  );
};


从“React”导入React,{createContext,useState};
export const AppContext=createContext();
export const AppProvider=({children})=>{
//使用useState()声明的用户状态
const[user,setUser]=useState(null);
返回(
{儿童}
);
};
App.js


import React from 'react';

import {
  BrowserRouter as Router,
  Route,
  Switch
} from 'react-router-dom';

import './App.css';

import Login from './components/Login';

import { AppProvider } from './Contexts/AppContext';

export default () => (
<Router>
  <div className="App">
    <Switch>
      <AppProvider>
      <Route exact path='/' component={Login}/>
      </AppProvider>
    </Switch>
  </div>
</Router>
)


从“React”导入React;
进口{
BrowserRouter作为路由器,
路线,,
转换
}从“反应路由器dom”;
导入“/App.css”;
从“./components/Login”导入登录名;
从“./Contexts/AppContext”导入{AppProvider};
导出默认值()=>(
)
Login.js


import React, { useState, useContext} from "react";
import { AppContext } from "../Contexts/AppContext";
import { useHistory } from "react-router";
import axios from "axios";
import { Link } from "react-router-dom";

const api = 'http://localhost:5000';

const Login = ({ children }) => {

  const history = useHistory();

  const [ email, setEmail ] = useState("");
  const [ pass, setPassword ] = useState("");

//Here is the issue setUser now returns null

  const { user, setUser } = useContext(AppContext);

  const emailChange = (event) => {
    event.preventDefault();
    setEmail(event.target.value);
    console.log(email);
  };

  const passwordChange = (event) => {
    event.preventDefault();
    setPassword(event.target.value);
    console.log(pass);
  };

  const submit = () => {

    axios.post(`${api}/login`, { emailAddress: email, password: pass })
    .then(res => {
      const data = res.data;
      setUser(data);
      console.log(user)
      history.push({
        pathname: "/account-page" 
     });
    })
    .catch(err => console.log(err));
  }

  const handleSubmit = (event) => {
    event.preventDefault();
    submit()
  }

  return (
    <div>
      <h1>Login</h1>
      <form onSubmit={handleSubmit}>
        <input
          id="emailAddress"
          name="emailAddress"
          type="text"
          placeholder="emailAddress"
          onChange={emailChange}
        />
        <input
          id="password"
          name="password"
          type="password"
          placeholder="Password"
          onChange={passwordChange}
        />
        <button type="submit">Submit</button>
        <button >Cancel</button>
      </form>

      <p>Don't have a user account?
        <Link className="sign-up-link" to="/">Click here</Link>
        to sign up!
      </p>
    </div>
  );
}

export default Login


从“React”导入React,{useState,useContext};
从“./Contexts/AppContext”导入{AppContext};
从“react router”导入{useHistory};
从“axios”导入axios;
从“react router dom”导入{Link};
常数api=http://localhost:5000';
常量登录=({children})=>{
const history=useHistory();
const[email,setEmail]=useState(“”);
const[pass,setPassword]=useState(“”);
//下面是setUser现在返回null的问题
const{user,setUser}=useContext(AppContext);
const emailChange=(事件)=>{
event.preventDefault();
setEmail(event.target.value);
控制台日志(电子邮件);
};
常量密码更改=(事件)=>{
event.preventDefault();
设置密码(event.target.value);
控制台日志(pass);
};
常量提交=()=>{
post(`${api}/login`,{emailAddress:email,pass:pass})
。然后(res=>{
常数数据=分辨率数据;
设置用户(数据);
console.log(用户)
历史推送({
路径名:“/帐户页”
});
})
.catch(err=>console.log(err));
}
const handleSubmit=(事件)=>{
event.preventDefault();
提交()
}
返回(
登录
提交
取消
没有用户帐户吗?
点击这里
去报名吧!

); } 导出默认登录名
从逻辑上看,它似乎不正确,因为在react上下文中,我们只能将值传递给组件,而不能传递给“SetState”(在您的情况下是setuser)函数本身。