You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SolidJS组件调用的异步函数中获取Context值?

在SolidJS异步函数中获取Context值的问题与解决方法

问题描述

能否在SolidJS组件调用的异步函数中获取Context值?
即使使用runWithOwner(),在第一个await之后获取到的仍是Context的默认值,而非外层Provider提供的值。

尝试将异步调用包裹在runWithOwner()中,代码示例如下:

const Ctx = createContext('default');
return <Ctx.Provider value={'not-default'} >{
  (() => {
    runWithOwner(getOwner()!, async () => {
      const f = async () => {};
      console.log('before', useContext(Ctx));
      await f();
      console.log('after', useContext(Ctx));
    });
    return '';
  })()
}</Ctx.Provider >;

解决方法

已通过改用Signals而非Context解决问题,尽管本质都是全局变量引入,但Signals可正常工作,代码示例如下:

const [Sig, setSig] = createSignal('default');
const Ctx = createContext('default');
const f = async (where: string) => {
  console.log(where, 'ctx', useContext(Ctx), 'sig', Sig());
};
return <Ctx.Provider value={setSig('not-default')} >{
  (() => {
    (async () => {
      await f('first');
      await f('broken');
    })();
    return '';
  })()
}</Ctx.Provider >;

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:38:18