我对React应用程序有问题.我需要在全局状态中保留一个项目array.

这是我的钩子:

import { useContext } from "react";
import GlobalContext from "../context/GlobalProvider";

const useGlobal = () => {
return useContext(GlobalContext);
}

export default useGlobal;

这是我的提供者:

import { createContext, useState } from "react";
const GlobalContext = createContext({});

export const GlobalProvider = ({ children }) => {
const [global, setGlobal] = useState({});

return (
    <GlobalContext.Provider value={{ global, setGlobal }}>
        {children}
    </GlobalContext.Provider>
)
}

export default GlobalContext;

在我的应用程序中.js我有:

import useGlobal from "../hooks/useGlobal.js";
const { setGlobal } = useGlobal();

const handleGotoA = () => {
    
    const id_G = item
    const id_G1 = item1
    const id_G2 = item2
    setGlobal({ id_G, id_G1, id_G2 });
   
}

我得到一个错误:

"setGlobal is not a function"

我找不到也不理解为什么,任何帮助都将不胜感激.

推荐答案

确保您在App函数内部调用这一行const { setGlobal } = useGlobal(),而不是在外部调用,因为它是一个钩子,所以应该紧跟在Rules of Hooks之后.类似于:

const App = ()={
 //...
 const { setGlobal } = useGlobal(); // inside and at the top level of the component
 //...
}

此外,global在JavaScript中是一个保留名称.为了避免混淆和可能的错误,请使用其他名称,如globalData.最后确保App被包裹在GlobalProvider内,如下所示:

<GlobalProvider >
  <App/>
</GlobalProvider>

Javascript相关问答推荐

积分计算和 colored颜色 判断错误

React Hooks中useState的同步问题

使用print This时, map 容器已在LeafletJS中初始化

使用json文件字符串来enum显示类型字符串无法按照计算的enum成员值的要求分配给类型号

窗口.getComputedStyle()在MutationObserver中不起作用

使用续集和下拉栏显示模型属性

如何找出摆线表面上y与x相交的地方?

我的服务工作器没有连接到我的Chrome扩展中的内容脚本.我该怎么解决这个问题?

使用Java脚本根据按下的按钮更改S文本

以Angular 实现ng-Circle-Progress时出错:模块没有导出的成员

同一类的所有div';S的模式窗口

搜索功能不是在分页的每一页上进行搜索

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

为列表中的项目设置动画

输入的值的类型脚本array.排序()

使用Reaction窗体挂钩注册日历组件

为什么我的Navbar.css没有显示在本地主机页面上?

无法在Adyen自定义卡安全字段创建中使用自定义占位符

如何将值从后端传递到前端

对象作为react 子对象无效(已找到:具有键的对象{type,props}).如果要呈现一个子级集合,请改用数组