我试图从API中呈现一个简单的用户列表,该列表返回以下内容:
[{"UserID":2,"FirstName":"User2"},{"UserID":1,"FirstName":"User1"}]
我不完全理解如何使用类型处理Axios响应。TypeScript错误为
类型“{}|{id:number;firstName:string;}”不可分配给类型“IntrinsicAttributes”
属性“项目”在“{}”类型中缺失,但在“UserListProps”类型中是必需的。
从
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;
如果你不希望 Axios 推断值响应
的类型为 any,则需要在调用 axios.get
时提供一个类型参数。
并且当您使用 State 创建
用户数组时,您传递了一个不正确的类型参数。
interface User {
id: number;
firstName: string;
}
// Initialized as an empty array
const [users, setUserList] = useState<User[]>([]); // 'users' will be an array of users
例如
import React, {useEffect, useState, Fragment } from 'react';
import UserList from './UserList';
import axios from 'axios';
interface User {
id: number;
firstName: string;
}
// You can export the type TUserList to use as -
// props type in your `UserList` component
export type TUserList = User[]
const Users: React.FC = (props) => {
// You can also use User[] as a type argument
const [users, setUserList] = useState<TUserList>();
useEffect(() => {
// Use [] as a second argument in useEffect for not rendering each time
axios.get<TUserList>('http://localhost:8080/admin/users')
.then((response) => {
console.log(response.data);
setUserList(response.data);
});
}, []);
return (
<Fragment>
<UserList {...users} />
</Fragment>
);
};
export default Users;
如果选择导出类型类型TUserList=User[]
,则可以在UserList
组件中使用它作为道具的类型。例如
import React, {Fragment } from 'react';
import { TUserList } from './Users';
interface UserListProps {
items: TUserList // Don't have to redeclare the object again
};
const UserList: React.FC<UserListProps> = (props) => {
return (
<Fragment>
<ul>
{props.items.map(user => (
<li key={user.id}>
<span>{user.firstName}</span>
{ /* Do not call the delete function. Just point
to it. Set this to null in bind(). */}
</li>
))}
</ul>
</Fragment>
);
};
export default UserList;
axios/index.d.ts中定义了一个通用的get
方法
get<T = never, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig<T>): 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>
);
};
我有一个非常简单的功能组件,如下所示: 和另一个组成部分: 我不断发现以下错误: [ts]JSX元素类型“ReactNode”不是JSX元素的构造函数。类型“undefined”不可分配给类型“ElementClass”。[2605] 如何正确地键入此内容?
axios响应数据类型怎么定义? 相关代码
问题内容: 如何在axios中设置获取响应的状态? 问题答案: 您在这里遇到语法错误。你应该试试这个 这里有几件事要注意: 是一个异步函数,这意味着其余代码将被执行。当服务器的响应到达时,传递给的函数将被执行。的返回值称为承诺对象。您可以在此处了解更多信息 关键字根据调用的位置而具有不同的值。in 应该 引用构造函数对象,并且在函数内部调用时,它引用该对象。这就是为什么我分配给变量的原因。您可以在
我是react with typescript的初学者,在下面的代码中面临问题 下面是仪表板组件的代码 这是路线代码 在路线代码中,我面临类型问题,即。 E:/Web/src/router/route中的TypeScript错误。tsx(18,51): 没有重载匹配此调用。 重载1 of 2,'(props: ReadOnly): Road',给出以下错误。键入{Dashboard: string
我想在我的页面中获取数据,如果我运行: 获取http://localhost:8000/api/posts net::err_aborted401(未经授权) CORS策略阻止从来源“http://localhost:3000”访问位于“http://localhost:8000/api/posts”的XMLHttpRequest:请求的资源上没有“access-control-allog-ori
问题内容: 在TypeScript React Application中使用有意义吗?还是“皮带和吊带”的情况? 由于组件类是使用类型参数声明的: 有添加任何真正的好处吗 类定义? 问题答案: 将两个组件道具同时保持为TypeScript类型通常没有太大价值。 在某些情况下,这样做很有用: 发布将由普通JavaScript使用的包,例如组件库。 接受并传递外部输入,例如API调用的结果。 使用库中