如何在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
相关产品推荐
相关产品推荐

