gpt4 book ai didi

javascript - 为什么状态始终为 0,即使使用 useCallback 后也是如此

转载 作者:行者123 更新时间:2023-11-28 17:05:22 25 4
gpt4 key购买 nike

我希望它应该是一个计时器。useCallback 会在时间改变后刷新,所以第二次时 time 为 1,但仍然是0

我尝试使用 useCallback 但没有成功

import React, { useState, useEffect, useCallback } from 'react';
import { render } from 'react-dom';
import './style.css';

import {interval} from 'rxjs'
import { take } from 'rxjs/operators';

const inter$ = interval(1000);

function App(){
const [time, setTime] = useState(0);
const callback = useCallback(()=> {
setTime(time+1);
console.log('hella');
}, [time])

useEffect(()=>{
console.log('hello')
inter$.subscribe(callback)

}, [])

return <div>{time}</div>
}


render(<App />, document.getElementById('root'));

始终显示 1

这是code

最佳答案

useEffect 内部,回调不会改变,因为它不是依赖项。因此,订阅回调内的时间始终为 0。

使用Rx.js的工作解决方案:
setTime 调用基于回调函数内的 prevState。

import React, { useState, useEffect } from "react";
import { render } from "react-dom";
import "./style.css";

import { interval } from "rxjs";
import { take } from "rxjs/operators";

const inter$ = interval(1000);

function App() {
const [time, setTime] = useState(0);

useEffect(() => {
console.log("hello");
inter$.subscribe(() => {
setTime(prevTime => prevTime + 1);
console.log("hella");
});
}, []);

return <div>{time}</div>;
}

render(<App />, document.getElementById("root"));

关于javascript - 为什么状态始终为 0,即使使用 useCallback 后也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com