如何在提供者的值中传递数组和 setArray(React、Typescript、Context)

Posted

技术标签:

【中文标题】如何在提供者的值中传递数组和 setArray(React、Typescript、Context)【英文标题】:How pass a array and setArray in value of provider (React, Typescript, Context) 【发布时间】:2020-09-29 22:00:48 【问题描述】:

如何在提供者的值中传递数组和 setArray? 我的主要问题是如何为此创建一个接口,因为它说的类型不正确。

数组包含对象列表,我需要查阅此数组并设置稍后使用过滤器。

import React from "react";

interface Lista 
  nome: string,
  empresa: string,
  ramal: number


const listaInicial: Lista = 
  nome: "",
  empresa: "",
  ramal: 0


interface Props 
  children: React.ReactNode


const ListaContext = React.createContext<Lista>(listaInicial);

export default function ListaProvider(children: Props) 
  const [lista, setLista] = React.useState<Lista[]>([]);

  React.useEffect(() => 
    setLista([
      
        nome: "nome 1",
        empresa: "matriz",
        ramal: 2000
      ,
      
        nome: "nome 2",
        empresa: "matriz",
        ramal: 2001
      ,
      
        nome: "nome 3",
        empresa: "sede",
        ramal: 2002
      ,
      
        nome: "nome 4",
        empresa: "sede",
        ramal: 2002
      ,
    ])
  , []);

  return (
    <ListaContext.Provider value=lista, setLista>
      children
    </ListaContext.Provider>
  )

【问题讨论】:

【参考方案1】:

你需要为 React.createContext 创建一个不同的接口

例如:

    interface ListaContextValue 
     lista:Lista[],
     setLista:(data:Lista[]) => void
    

    const listaInicial: ListaContextValue = 
      lista:[
       nome: "",
        empresa: "",
        ramal: 0
       ],
      setLista: (data) => 
    

然后,

const ListaContext = React.createContext<ListaContextValue>(listaInicial);

【讨论】:

【参考方案2】:

React.createContext&lt;Lista&gt;(listaInicial);表示ListaContext.Provider的返回值为Lista类型。 如果你想设置提供的值是listasetLista 你可以试试这个不定义createContext 的类型。

const ListaContext = React.createContext(listaInicial);

或者

const ListaContext = React.createContext<lista: Lista[], setLista:React.Dispatch<React.SetStateAction<Lista[]>> >(listaInicial);

【讨论】:

以上是关于如何在提供者的值中传递数组和 setArray(React、Typescript、Context)的主要内容,如果未能解决你的问题,请参考以下文章

教义:将模型值设置为数组

如何从数组内的值中修剪数据?

如何使用 R 将数据帧/矩阵写入 CSV,但值中有逗号

使用猫鼬模式将多个选择元素值中的值存储到MongoDB中的数组中

尝试从数组中的值中删除基于 MKMap 的引脚

在数组值中显示额外数据