当前位置: 首页 > 知识库问答 >
问题:

生命周期和反应变量(状态和使用效果)

仇建茗
2023-03-14

我很难理解react的生命周期,我的问题可能是错误的逻辑(我来自php和web js)

项目摘要:使用某些过滤器重复从api(setInterval)获取信息,其中过滤器也是对api的请求的结果。

有车站,订单和当前站(来自UI)

我的问题是,在调度变量集时,不可能立即获得相同的变量。

// init app
....
useEffect(() =>
{
    listStations().then(() => {
        dispatch({type: 'setLoadedStations', state: true});
    });
},[]);
....

// events
...
useEffect(() =>
{
    listOrders(true);
},[state.loadedStations]);
...

// function
const listOrders = async (createJob?:boolean) => 
{
    let currentStationId = state.stations[state.currentStation].id;
    const orderList = await getOrders(currentStationId); 
    dispatch({type: 'setOrders', value: orderList});

    if(createJob) {
        setInterval(await listOrders, 4000);
    }
}

// UI
...
<IonButton
    onClick={
        (e: any) => {
            e.persist();
            dispatch({
                type: 'setCurrentStation',
                station: key
            });
        }
    }
>{station.title}</IonButton>
...

在 setInterval 中,它将始终是创建 setInterval 的相同状态.currentStation。即使后来当前站发生变化。

我尝试的另一个解决方案是添加一个清除,但它也没有用,因为变量不是“保存”。

// App.tsx
const App: React.FC = () => {
let jobId = 0;
...
// function
if(createJob) {
    if(jobId) clearInterval(jobId);
    jobId = setInterval(await listOrders, 4000);
}

正确的方法是什么?是否可以在没有用效果的情况下访问状态变量?

共有1个答案

令狐宏伟
2023-03-14

这行好像很奇怪< code > jobId = setInterval(await list orders,4000);。你在那里想做什么。您也不能从< code>setTimeout或< code>setInterval返回值。

澄清

< code>setInterval和< code>setTimeout返回值,但不能返回值(< code>await listOrders)。

 类似资料:
  • 使用React钩子(如)的、和生命周期钩子的等价物是什么?

  • 大部分会话的状态字如其名:连接中(CONNECTING)、已连接(CONNECTED)、已关闭(CLOSED)和未连接(NOT_CONNECTED)。状态转化依赖于客户端和服务器间发生的不同事件。 图2-6 会话状态和转化 有一个重要的参数你要设置的是当创建会话时的超时时间,它是Zookeeper服务允许一个会话宣称它过期的时间。如果服务在时间t内没有收到指定会话相关的消息,它就会宣称会话过期了。

  • 本文向大家介绍说说线程的生命周期和状态?相关面试题,主要包含被问及说说线程的生命周期和状态?时的应答技巧和注意事项,需要的朋友参考一下 Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4 节)。 线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java

  • 回顾一下我们实现的一个关于时钟的例子。 我们仅仅是知道如何用一种方法更新用户界面。 我们仅仅是使用了ReactDOM.render()每一秒重新渲染了页面而已: function tick(){ const element = ( <div> <h1>Hello,world!</h1>

  • 我对铁锈寿命的学习过程如下(基于铁锈书): 我想注释,当引用后面的值超出范围时 通常(并不总是!请参阅. data部分,即'静态')值位于块中 我们注释像这样的块,例如结构字段像 。 在哪一点上我的理解是错误的?提前感谢你对我的宽容。 免责声明:

  • 问题内容: 下面是一个简单的计数器。但是我有3个问题。 第3行的状态是什么?它看起来像一个全局变量,如果有或在它之前会很有意义。那是生命周期函数/变量吗? 我必须从react导入Component吗?我记得我在v15中不需要这样做。 prevState来自哪里? 问题答案: 这是一个带有注释代码的演示,可为您提供更多信息:http : //codepen.io/PiotrBerebecki/pen