反应计数器挂钩不会增加

时间:2019-10-16 11:47:53

标签: reactjs

当我单击运行函数login的按钮时,第一次hooks(状态)logged的值为0。我希望它有价值1

const [logged, setLogged] = React.useState(0);
const login = () => {
   if (tempLogin.login === "Login" && tempLogin.password == "Haslo") {
    setLogged(logged => logged + 1);
     console.log(logged);
  }

3 个答案:

答案 0 :(得分:0)

您正在正确更新!请记住,只是在错误的位置登录,钩子值会在下一个render上更新,因此您正在console.log内调用login 登录执行时logged尚未更新

const Component = () =>{

    const [logged, setLogged] = React.useState(0);

    const login = () => {
         if (tempLogin.login === "Login" && tempLogin.password == "Haslo") {
             setLogged(logged => logged + 1);
     }
     //Component's body
     console.log(logged)  // 0, 1
     return <div>{logged}</div>
 }

答案 1 :(得分:0)

这可以帮助:

const [logged, setLogged] = React.useState(0); const login = () => {   
if (tempLogin.login === "Login" && tempLogin.password == "Haslo") {
           setLogged(logged + 1);
           console.log(logged);  
     }

答案 2 :(得分:0)

public Entry(BiFunction<MyObject, MyObject, MyObject> func) { } 是异步的,不会立即更新状态,相反,您将在下一个渲染中看到更新后的状态。

您可以使用setLogged(它告诉React您的组件在渲染后需要做些事情)来查看useEffect的新值:

logged