从函数调用时,reactjs 状态不会更新

发布于 2025-01-14 07:20:35 字数 1135 浏览 1 评论 0原文

上下文

这是我从另一个组件调用函数 invoked(..) 的 。在 invoked 内部,我设置了 State,但状态未设置。它不会触发 useEffect,也不会获取 useInterval 中的更新值。

下面是代码。

组件 1 = exampleComp.ts

const exampleComp = ({initValue: ExampleProps}) {
  const [params, setParams] = useState<{field1: null | string}> ({field1: null});

  const invoked = (x: string) => {
    console.log("inside invoked"); // this gets printed
    setParams({"field1": x});
  };

  useEffect(() => {
    console.log(params); // does not come here :(
  }, [params]);

  const fetchData = {...};

  useInterval(
      () => {
        if (!params.field1 || fetching) return;
        console.log("in interval", params); // does not come here too :(
        fetchData(params.field1);
      },
      params && !fetching ? 5000: null,
    );

    return {invoked, ...}
}

组件 2:

const newComp  = ({initValue: ExampleProps}) {
  const {invoked, ..} = useExampleComp({...}); //Example comp is the above component.
  useEffect(() => {
    invoked(x);
  }, []);
}

任何帮助将不胜感激!谢谢。

here is the context

I am invoking a function invoked(..) from another component. Inside invoked I setState but the state does not get set. It does not trigger the useEffect nor does it take the updated value in the useInterval.

Below is the code.

Component 1 = exampleComp.ts

const exampleComp = ({initValue: ExampleProps}) {
  const [params, setParams] = useState<{field1: null | string}> ({field1: null});

  const invoked = (x: string) => {
    console.log("inside invoked"); // this gets printed
    setParams({"field1": x});
  };

  useEffect(() => {
    console.log(params); // does not come here :(
  }, [params]);

  const fetchData = {...};

  useInterval(
      () => {
        if (!params.field1 || fetching) return;
        console.log("in interval", params); // does not come here too :(
        fetchData(params.field1);
      },
      params && !fetching ? 5000: null,
    );

    return {invoked, ...}
}

Component 2:

const newComp  = ({initValue: ExampleProps}) {
  const {invoked, ..} = useExampleComp({...}); //Example comp is the above component.
  useEffect(() => {
    invoked(x);
  }, []);
}

Any help will be appreciated! thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清醇 2025-01-21 07:20:35

事实证明该组件卸载得太早了。当组件的范围太窄时就会发生这种情况。

如果您遇到类似的问题,请尝试记录该组件以查看是否确实发生了这种情况。

Turns out that the component was unmounting too early. This happens when the scope of the component is too narrow.

If you have a similar problem, try logging the component to see if this is indeed happening.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文