Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用TypeScript创建React上下文以共享状态_Reactjs_Typescript_Use Context - Fatal编程技术网

Reactjs 使用TypeScript创建React上下文以共享状态

Reactjs 使用TypeScript创建React上下文以共享状态,reactjs,typescript,use-context,Reactjs,Typescript,Use Context,我试图用TypeScript创建一个React上下文,以便在组件之间共享状态。创建上下文时,我尝试将null作为初始值传递 //contexts.ts文件 从“react”导入{createContext}; export const AuthorContext=createContext(null); 但是,当尝试将状态值和setter函数传递给提供程序的值时,这会导致问题,因为不能分配给null类型 const[message,setMessage]=useState(“”); 因此,我

我试图用TypeScript创建一个
React上下文
,以便在组件之间共享状态。创建上下文时,我尝试将
null
作为初始值传递

//contexts.ts文件
从“react”导入{createContext};
export const AuthorContext=createContext(null);
但是,当尝试将
状态值
setter函数
传递给
提供程序的值
时,这会导致问题,因为不能分配给null类型

const[message,setMessage]=useState(“”);
因此,我尝试使用错误消息提供的类型定义创建一个
接口

接口IStateStringDef{
stateVal:字符串;
setStateVal:反应、调度;
}
并更新我的
上下文
提供程序

//contexts.ts文件
export const AuthorContext=createContext(null);
//提供程序所在的文件

这很有效,但似乎不是最正确、最优雅的方式,在TypeScript中创建和使用上下文的正确方式是什么?

您肯定需要一个用于上下文的接口或类型(如IStateStringDef)

接口IStateStringDef{
消息:字符串;
setMessage:React.Dispatch;
}
你不需要
null

您可以将默认值传递给上下文,如
createContext({message:“”,setMessage:()=>{});

这样做是正常的吗?是的,但是没有
null
谢谢,在接口中使用
React.Dispatch
作为类型似乎很奇怪,但如果这是正确的方法,我将使用它。
interface IStateStringDef {
    message: string;
    setMessage: React.Dispatch<React.SetStateAction<string>>;
}