JavaScript:如何在其他JS文件中调用函数内部的aPrice、bPrice变量
问题场景
我在 index.Js 文件中编写了如下代码:
const toto = ({tokenMode = false}) => { const bPrice = usePriceB(); const aPrice = usePriceA(); return ( <SectionWrapper section={{ title: tokenMode ? 'Pools' : 'Farming', id: tokenMode ? 'pools' : 'farming', cards: generateCards().slice(0, 3), }} > <Card cards={generateCards().slice(0, 3)} ethereum={window.ethereum}/> </SectionWrapper> ); } export default toto;
具体疑问
我该如何在其他 .js 文件中调用 aPrice 和 bPrice 这两个变量?
补充说明:已在代码中补上该函数的完整返回逻辑。
解决思路
当前代码里的 aPrice 和 bPrice 是定义在 toto 函数内部的局部变量,受JS函数作用域限制,外部文件本身无法直接访问。这两个值本质是通过React自定义Hook usePriceA、usePriceB 获取的价格数据,可以通过以下合规方案实现跨文件调用:
- 直接复用底层自定义Hook(推荐方案)
这是最符合React开发规范的实现方式。aPrice和bPrice的值本来就是从对应自定义Hook返回的,完全不需要经过toto函数做中转:- 先定位
usePriceA、usePriceB两个Hook的定义文件,确认其导出方式 - 在需要使用价格值的其他js文件中,严格遵循Hook使用规则(仅在函数组件或其他自定义Hook内部调用),直接引入并调用这两个Hook,就能拿到和
toto内部完全一致、实时同步的价格值
// 其他js文件内的示例代码 import { usePriceA, usePriceB } from '对应Hook的文件路径' const DemoModule = () => { const aPrice = usePriceA() const bPrice = usePriceB() // 后续逻辑可直接使用这两个变量 } - 先定位
- 不建议的实现路径
不要为了图方便在toto函数内部把两个变量挂到全局对象上(比如window.aPrice = aPrice),这种写法会直接丢失自定义Hook的响应式特性,无法拿到价格的实时更新值,还会造成全局变量污染,后续维护成本极高。
如果你确实没有权限复用底层的两个价格Hook,也可以通过组件props逐层透传的方式,把toto内部的价格值传给需要使用的子组件,但这种方式会增加大量不必要的组件传参层级,长期维护成本更高。
内容的提问来源于stack exchange,提问作者devBsc
相关产品推荐
相关产品推荐

