React 和 Typescript,Axios 响应的类型?

G. 德贝利

我试图从返回这个的 API 中呈现一个简单的用户列表:

[{"UserID":2,"FirstName":"User2"},{"UserID":1,"FirstName":"User1"}]

我不完全理解如何处理带有类型的 Axios 响应。打字稿错误是

Type '{} | { id: number; firstName: string; }' is not assignable to type 'IntrinsicAttributes & UserListProps & { children?: ReactNode; }'.
Property 'items' is missing in type '{}' but required in type 'UserListProps'.

来自下面文件中<UserList />元素Users.tsx我的User界面有问题吗?

import React, {useEffect, useState, Fragment } from 'react';
import UserList from './UserList';
import axios, {AxiosResponse} from 'axios';

interface User {
    id: number;
    firstName: string;
}

const Users: React.FC = (props) => {
    const [users, setUserList] = useState<User>();

    useEffect(() => {
        // Use [] as second argument in useEffect for not rendering each time
        axios.get('http://localhost:8080/admin/users')
        .then((response: AxiosResponse) => {
            console.log(response.data);
            setUserList( response.data );
        });
    }, []);

    return (
        <Fragment>
            <UserList {...users} />
        </Fragment>

    );
};
export default Users;

下面是我的UserList.tsx

import React, {Fragment } from 'react';

interface UserListProps {
    items: {id: number, firstName: string}[];
};

const UserList: React.FC<UserListProps> = (props) => {
    return (
        <Fragment>
            <ul>
            {props.items.map(user => (
                <li key={user.id}>
                    <span>{user.firstName}</span>
                    {/* not call delete function, just point to it
                    // set this to null in bind() */}
                </li>
            ))}
            </ul>
        </Fragment>
    );
};

export default UserList;
约瑟夫·波德莱克

中定义的通用get方法Axios公司/ index.d.ts

get<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;

例子

interface User {
    id: number;
    firstName: string;
}


axios.get<User[]>('http://localhost:8080/admin/users')
        .then(response => {
            console.log(response.data);
            setUserList( response.data );
        });

- 编辑

我认为您将列表以错误的方式传递给子组件。

const [users, setUserList] = useState<User[]>([]);
<UserList items={users} />
interface UserListProps {
    items: User[];
};
const UserList: React.FC<UserListProps> = ({items}) => {
    return (
        <Fragment>
            <ul>
            {items.map(user => (
                <li key={user.id}>
                    <span>{user.firstName}</span>
                </li>
            ))}
            </ul>
        </Fragment>
    );
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

与TypeScript和React的联合类型

React和Typescript-错误的类型检查

React和Typescript组件对`Component`的道具类型

React Hooks TypeScript事件和状态类型

TypeScript和React中的联合类型道具

React 和 Typescript,出现“预期类型”错误

axios 和 fetch 在 React 中返回空响应数据

在哪里放置常量和类型React Typescript

React TypeScript:路线位置和子代属性的正确类型

WebPack-React-TypeScript:加载CSS和导出类型

TypeScript和React Native:RN样式的类型定义是否错误?

React复选框事件和处理程序的Typescript类型?

为什么我的类型在 React 和 TypeScript 中为 null?

React、typescript 和 prop-types:如何使用自己的类型?

如何使用 react 和 typescript 向 graphql 模式添加类型?

使用Typescript和React.Konva指定onClick事件类型

联合类型不允许使用 Typescript 和 React 的 if 语句

使用React和Typescript描述咖喱状态处理程序的类型

接口MouseEvent和TouchEvent的React Typescript事件类型

Typescript和React使用空类型数组设置初始状态

Typescript和带有复杂prop类型接口的React

如何在React App中使用axios响应解决TypeScript错误

如何使用axios和TypeScript将JSON响应解析为PascalCase模型?

在 React 和 TypeScript 中使用类型化的 init 和 useRef 和 useEffect

React/Axios 像 Postman 一样接收响应状态和 JSON

React JSS和TypeScript

Axios:如何拦截和响应axios请求

类型响应的 Angular 2 和 typescript 参数不可分配

Typescript:为包含索引签名和密钥对的响应对象添加类型