Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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 如何将泛型从函数传递到useState_Reactjs_Typescript - Fatal编程技术网

Reactjs 如何将泛型从函数传递到useState

Reactjs 如何将泛型从函数传递到useState,reactjs,typescript,Reactjs,Typescript,我需要将从函数得到的generic传递给useState,因为它是状态的一部分。我该怎么做 示例代码: import React, { useState } from "react"; const DialogContext = React.createContext<TContext>({}); type TStatus = 'close' | 'success' | 'cancel' type TReturnContext<V> = { status: T

我需要将从函数得到的generic传递给useState,因为它是状态的一部分。我该怎么做

示例代码:

import React, { useState }  from "react";

const DialogContext = React.createContext<TContext>({});

type TStatus = 'close' | 'success' | 'cancel'

type TReturnContext<V> = {
  status: TStatus,
  values: V
};

type TContext = {
  open?: TOpenCallback
};

type TInstances = {
  instanceName: string
};


type TProps = {
  Layout: React.ElementType
  config: {
    [instanceName: string]: React.FC<null>
  }
};

type TOpenCallback = <T, V>(instanceName: string, params: T) => Promise<Readonly<TReturnContext<V>>>;

export const Provider: React.FC<TProps> = ({ children, Layout, config }) => {
  const [instances, setInstances] = useState<Array<TInstances>>([]);

  const open: TOpenCallback = (instanceName, params) =>
    new Promise(() => {
      setInstances(prevInstances => [
        ...prevInstances,
        { instanceName, params }
      ]);
    });

  const context = {
    open
  };


  const component = instances.map(({ instanceName, params }) => (
    <Layout
      key={instanceName}
      instanceName={instanceName}
      component={config[instanceName]}
      // cancel={cancel}
      // success={success}
      // close={close}
      params={params}
    />
  ));

  return (
    <DialogContext.Provider value={context}>
      <>
        {children}
        {component}
      </>
    </DialogContext.Provider>
  );
};

import React,{useState}来自“React”;
const DialogContext=React.createContext({});
键入TStatus='close'|'success'|'cancel'
类型TReturnContext={
状态:TStatus,
数值:V
};
类型TContext={
打开?:TOpenCallback
};
类型TInstances={
instanceName:字符串
};
类型TProps={
布局:React.ElementType
配置:{
[instanceName:string]:React.FC
}
};
键入TOpenCallback=(instanceName:string,params:T)=>Promise;
导出常量提供程序:React.FC=({子项,布局,配置})=>{
const[instances,setInstances]=useState

类型“TInstances”没有属性“params”,也没有字符串索引签名


这不是完整的示例,但当我使用open函数时,我会了解params类型,如何将其传递到useState generic?

我无法复制该错误,并且该错误没有意义,这使我怀疑是否还有其他错误和编译器错误。请使用可以复制和粘贴的进入
npx create react App的
App.tsx
——键入脚本
App以复制问题。现在的示例是正确的