当前位置: 首页 > 知识库问答 >
问题:

传递typeScript的接口以反应状态[重复]

上官兴昌
2023-03-14

我是新的TypeScript。我想通过打字稿的接口来反应状态,然后呈现状态。但是我不知道如何传递接口值来反应状态。

import React, { useState } from 'react'

export interface Person {
  name: name
  age: age
}

type name = "John"
type age = 30
const Test = () => {

  const [state, setstate] = useState() //I want to pass the interface in here
  return (
    <div>
    <p> He is {state.name} and he is {state.age} years old</p> 
    </div>
  )
}
export default Test;

共有2个答案

佴波鸿
2023-03-14

您可以使用useState定义接口类型,例如

const [state, setstate] = useState<Person>({name: "John", age: 30 });

请确保根据Person类型属性提供intialState。相反,如果你定义一个空对象,你可以这样写

const [state, setstate] = useState<Person>(Object);

您还可以通过显式定义useState类型来将其指定为null或未定义

const [state, setstate] = useState<Person | undefined>();

const [state, setstate] = useState<Person | null>(null);
法子昂
2023-03-14

创建与接口匹配的对象,并将其传递到useState,如下所示:

const [state, setState] = useState({name: "John", age: 30});

您还可以明确该状态变量的类型,因为useState是通用的:

const [state, setState] = useState<Person>({name: "John", age: 30});

但你不必如此。TypeScript的类型检查是结构性的,而不是名义上的,这意味着任何具有适当匹配属性的对象都是状态的匹配对象。

如果你可能没有一个人,允许null未定义的

const [state, setState] = useState<Person | null>(null);
// or
const [state, setState] = useState<Person | undefined>(undefined);

在这种情况下,因为类型将是nullun定义的,如果它只是从传递到useState的内容中推断出来的,所以在调用中需要泛型类型参数。

对我来说,这个概念是打字脚本的基础。与其说某物是一种类型,不如说它是Java中的类型,而是某物与一种类型相匹配。这是非常有效的类型脚本:

interface A {
    name: string;
    age: number;
}
interface B {
    name: string;
    age: number;
}
let a: A = {name: "Joe", age: 27};
let b: B;
b = a;

b声明为typeBa声明为typeA都没关系,你可以做b=a;因为a的type是在结构上与b的类型兼容(在本例中,它们是相同的)。

这也是完全有效的:

interface A {
    name: string;
    age: number;
    rank: string;
}
interface B {
    name: string;
    age: number;
}
let a: A = {name: "Joe", age: 27, rank: "Junior Petty Officer"};
let b: B;
b = a;

a的类型具有b的类型不具有的属性(rank)是可以的。它仍然与b的类型兼容。

 类似资料:
  • 基本上是新的反应,我有点困惑如何正确地传递组件之间的状态。我发现一个类似的问题已经出现了——将表单元素状态传递给兄弟/父元素的正确方法是什么?但是我想知道你能否给我一个关于下面代码的具体答案。 目前应用的结构包括: 父组件- 2个孩子:和 目标是对我的Meteor收藏进行异步搜索,并仅显示与搜索词匹配的

  • 我是新来的,你能告诉我这是什么意思吗? 我知道语法条件?cond_true: cond: false,但我不知道

  • 反应路由器:链接和路由不传递状态到组件 我正在用React、Redux和React路由器构建一个在线购物应用程序。在主页上,显示所有项目。我希望用户能够点击一个图像,并被带到一个页面,其中包含该项目的项目详细信息。 下面是我如何做到这一点的: 在App.js中,我使用BrowserRouter、Route和Switch进行路由 这看起来很简单,我在网上看到了很多关于这一点的讨论。以下是我已经尝试过

  • 问题内容: 我偶尔会有一些react组件,这些组件在概念上是有状态的,需要重设。理想的行为将等同于删除旧组件并读取新的原始组件。 React提供了一种方法,该方法允许设置组件自己的显式状态,但不包括隐式状态(例如浏览器焦点和表单状态),并且还排除其子级状态。捕获所有这些间接状态可能是一项艰巨的任务,我宁愿严格而彻底地解决它,而不是在每一个令人惊讶的新状态下打个mol子。 是否有API或模式可以做到

  • 顺便说一下,在使用/而不是发射器时,我遇到了同样的问题。我已经决定给你们举这个例子,因为它很容易理解和再现。

  • 我正在尝试设置一个使用React的页面。该页面有一个下拉菜单组件,它应该触发父级中的状态更新。我尝试了以下几个例子,但没有任何效果。以下是我尝试过的两种方法的简化示例: > 将回调作为更新父状态的道具传递给子节点: }); 这始终显示“失败”,而不是“1”或“2”。 让父级使用onChange而不是回调获取下拉菜单的值。 }); }); 如果我尝试渲染状态,我可以在下拉组件中看到状态更改,但父级没