Javascript React在setInterval内失去状态,具有USEFFECT

Javascript React在setInterval内失去状态,具有USEFFECT,javascript,reactjs,Javascript,Reactjs,我在useEffect中使用setInterval来触发以秒为间隔执行的函数。但是,当执行回调时,state的值就是defaultstate的值,为什么 import React, { useState, useEffect, useCallback } from "react"; import "./styles.css"; export default function App() { const [count, setCount] = useS

我在useEffect中使用setInterval来触发以秒为间隔执行的函数。但是,当执行回调时,state的值就是defaultstate的值,为什么

import React, { useState, useEffect, useCallback } from "react";
import "./styles.css";

export default function App() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const i = setInterval(testando, 1000);
    return () => clearInterval(i);
  }, []);

  const testando = () => {
    console.log(count); --> here value is 0
    setCount((prev) => prev + 1);
  };

  return (
    <div className="App">
      <h1> {count} </h1> --> here value is right
      <button onClick={() => setCount((prev) => prev + 200)}> Teste </button>
    </div>
  );
}
import React,{useState,useffect,useCallback}来自“React”;
导入“/styles.css”;
导出默认函数App(){
const[count,setCount]=useState(0);
useffect(()=>{
常数i=设定间隔(testando,1000);
返回()=>clearInterval(i);
}, []);
常数testando=()=>{
console.log(count);-->此处的值为0
setCount((prev)=>prev+1);
};
返回(
{count}-->这里的值是正确的
setCount((prev)=>prev+200)}>Teste
);
}

您必须将
测试设置为使用效果依赖项

 useEffect(() => {
    const i = setInterval(testando, 1000);
    return () => clearInterval(i);
  }, [testando]);

您必须将
testando
置于有效依赖项中

 useEffect(() => {
    const i = setInterval(testando, 1000);
    return () => clearInterval(i);
  }, [testando]);

您应该在
useffect

useEffect(() => {
    const i = setInterval(testando, 1000);
    return () => clearInterval(i);
  });

您应该在
useffect

useEffect(() => {
    const i = setInterval(testando, 1000);
    return () => clearInterval(i);
  });

我不这么认为
testado
是一个函数。它不是state.put console there setCount((prev)=>console.log(prev)| | prev+1);因为它不能解析我的评论。将
testando
放在useEffect依赖项数组中并不像您认为的那样,我不这么认为
testado
是一个函数。它不是state.put console there setCount((prev)=>console.log(prev)| | prev+1);因为它不能解析我的评论。将
testando
放在useEffect依赖项数组中并不像您认为的那样。为什么
console.log(count)不使用时的问题
prev
将是正确的。因为在我的实际应用程序中,我需要它的声音,如
testando
应该在
useCallback
中定义。为什么
console.log(计数)不使用时的问题
prev
将是正确的。因为在我的实际应用程序中,我需要它的声音,如
testando
应该在
useCallback
中定义。这样做,useEffect将在任何重新渲染时被调用,可能不是所需的行为。这样做,useEffect将在任何重新渲染时被调用,可能不是所需的行为