Reactjs 如何定义要避免的属性:属性';X';不存在于类型';Y';
我有一个分页的设备列表,例如来自Restful API的名称、序列号等。Reactjs 如何定义要避免的属性:属性';X';不存在于类型';Y';,reactjs,typescript,axios,Reactjs,Typescript,Axios,我有一个分页的设备列表,例如来自Restful API的名称、序列号等。 我使用了Axios的get方法来获取列表。 查看Reactjs中的以下组件: import * as React from 'react'; import axios from 'axios'; export interface Props{ url: string; } export interface State{ devices: string[]; currentUrl: string; } clas
我使用了Axios的get方法来获取列表。
查看Reactjs中的以下组件:
import * as React from 'react';
import axios from 'axios';
export interface Props{
url: string;
}
export interface State{
devices: string[];
currentUrl: string;
}
class Devices extends React.Component<Props, State>{
constructor(props: Props){
super(props);
this.state = {devices: [], currentUrl: props.url};
console.log('first log',this.state);
}
componentDidMount() {
axios.get(this.state.currentUrl)
.then(({data}) =>{
console.log('Joye Data', data);
this.setState({devices: data.member})
console.log('Devices',this.state.devices)
})
.catch(function (error){
console.log('Error of Axios', error);
})
}
render(){
return(
<ul>
{this.state.devices.map(device => <li>{device.name}</li>)}
</ul>
);
}
}
export default Devices;
import*as React from'React';
从“axios”导入axios;
导出接口道具{
url:string;
}
导出接口状态{
设备:字符串[];
currentUrl:字符串;
}
类设备扩展了React.Component{
建造师(道具:道具){
超级(道具);
this.state={devices:[],currentUrl:props.url};
console.log('first log',this.state);
}
componentDidMount(){
get(this.state.currentUrl)
。然后({data})=>{
console.log(“Joye数据”,数据);
this.setState({devices:data.member})
console.log('Devices',this.state.Devices)
})
.catch(函数(错误){
console.log('Axios错误',错误);
})
}
render(){
返回(
{this.state.devices.map(device=>- {device.name}
)}
);
}
}
导出默认设备;
除了捕获以下错误的render()方法之外,其他方法都可以正常工作:类型“string”上不存在“Property”name
我知道,如果我想用Reactjs编译代码,我的意思是没有Typescript,前面提到的代码应该可以很好地工作,但是 如何定义属性(React中的道具)而不违反TS 惯例
注意:我搜索并找到了相同的问题,但他们的解决方案无法解决问题。这是编译器错误。如果代码正常工作,这意味着类型指定不正确,这是由TypeScript编译器检测到的
this.state.devices
被键入一个字符串数组,其中包含以下行:
devices: string[];
编译器希望device
在这一行是一个字符串,string
类型被推断,因为devices
被键入一个字符串数组:
this.state.devices.map(device => <li>{device.name}</li>);
这个问题不清楚
数据到底是什么。如果设备
应该是具有名称
属性的对象,为什么要将其定义为字符串
?@estus data是获取接收数据的可选名称!我认为有什么地方出了问题,那就是“设备”,我没有声明任何“设备”名称。请具体说明数据。成员等于什么。你有矛盾。在一个地方,您希望device
是一个字符串。在另一个地方,你希望它是一个物体。编译器只是指向它。我没有声明任何“设备”名称-为什么代码中有device.name
?没有矛盾data
是返回的JSON,而成员
是其绑定到data.element
的元素之一。顺便说一下,正如我提到的,我在接收数据方面没有任何问题(我通过console.log进行了检查)。问题是如何通过TS映射接收到的数据。关于上一个问题,为什么代码中有device.name
,因为访问了设备的name
属性。忘记设备u可以将其更改为x
例如:x=>{x.name}
。应该清楚问题是什么,状态。设备
被声明为字符串数组。您正在映射那些试图访问这些字符串的name
属性的设备(如错误消息所述)。实际的对象实例是否有什么并不重要。更改状态的定义或更改映射设备的方式。
export interface State{
devices: Array<{ name: string }>;
currentUrl: string;
}