小编pin*_*o64的帖子

为什么 addEvenetListener 上的回调打印出旧状态?

我有一个回调函数,我在其中设置了一些状态。国家似乎变异得很好。但是,我无法引用回调函数内的更新状态 - 它总是打印出初始状态。

所以我的问题是为什么会发生这种情况,如果我想检查回调内的更新状态,我应该如何进行?

import React, { useState, useEffect } from "react";
import Context from "./ctx";

export default props => {
  const [state, setState] = useState({
    x: 0,
    y: 0
  });

  useEffect(() => {
    window.addEventListener("resize", e => {
      setState({
        x: e.target.window.visualViewport.width,
        y: e.target.window.visualViewport.height
      });
      console.log(`${JSON.stringify(state)}`); <<---logs the initial state.
    });

    return () => {
      window.removeEventListener("resize");
    };
  }, []);

  console.log(`${JSON.stringify(state)}`); <<---logs updated versions of the state.

  return (
    <Context.Provider
      value={{
        ...state
      }}
    >
      {props.children}
    </Context.Provider>
  );
};
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

4
推荐指数
1
解决办法
1062
查看次数

标签 统计

javascript ×1

reactjs ×1