【问题标题】:Why counter is coming twice in console with different values? [duplicate]为什么计数器在控制台中以不同的值出现两次? [复制]
【发布时间】:2021-09-29 22:28:23
【问题描述】:

我正在试验 React 'ref' 并且正在使用下面的代码 sn-p。

import { useEffect } from "react";
import { useRef } from "react";
import { useState } from "react";

const Button = () => {

    const [counter, setCounter] = useState(0)
    const btnRef = useRef();


    useEffect(() => {
        btnRef.current.addEventListener('click', function () {
            console.log('counter ', counter);
            setCounter(counter => 1);
        })
    })

    return (
        <button ref={btnRef}>Click Me</button>
    )
}

export default Button;

我无法理解的是,这段代码 sn-p 每次单击按钮时都会在控制台中两次给我“计数器”值,并且使用不同的值。有人可以帮助我了解这里发生了什么。

当计数器值已经通过 setCounter 函数更改时,为什么计数器值一次又一次地显示“0”?

【问题讨论】:

  • 您在 useEffect 中缺少空依赖数组
  • 感谢您的回答。我已经放置了依赖项[]。但是现在每次单击按钮时状态都不会更新。你能告诉我为什么吗?再次感谢。
  • setCounter(counter =&gt; 1); 应该做什么?

标签: javascript reactjs react-hooks


【解决方案1】:

当您不传递依赖数组时,useEffect 会在包括第一个渲染在内的每个渲染上触发。所以它第一次渲染,然后你调用setCounter,它会触发第二次渲染。您可能正在寻找这个;

 useEffect(() => {
        btnRef.current.addEventListener('click', function () {
            console.log('counter ', counter);
            setCounter(counter => 1);
        })
    },[]) // <-- this is an empty dependency array

【讨论】:

  • 谢谢。我将空 [] 作为依赖项传递,现在控制台只显示一个值。但它没有更新状态,计数器状态没有设置为“1”。每次点击时,计数器值显示为“0”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2021-08-31
  • 1970-01-01
  • 2020-10-28
  • 2021-01-09
  • 1970-01-01
  • 2019-01-30
相关资源
最近更新 更多