我正在使用React,TypeScript和axios来处理HTTP请求。 当我做axios.get(myURL)时,我得到了这种格式的数据:
[["value1","value2"],["value3","value4"],["value5","value6"]]
我创建了一个表示字符串数组的类。这是代码:
import Serializable from '../interface/serializable';
export default class Row {
public row:string[];
}
以下是我想要使用此类的组件的代码:
import Row from '../class/row';
interface IColumnSelectionState {
readonly data: Row[],
}
class MyDataextends React.Component<any,IColumnSelectionState>{
constructor(props: any) {
super(props);
this.state = {
data: [],
}
this.submit = this.submit.bind(this);
}
private submit():void{
axios.get("myURL").then(res => {
const response = res.data;
this.setState({ data: response });
}).catch(error => {
console.log(error);
})
}
}
执行“submit()”方法时我遇到的问题:
console.log (this.state.data) // I see my data in the format described above
但是当我这样做时:
console.log (this.state.data [0].row) // this shows me undefined while I declared my array in the Row class
我真的需要让第一个数组循环并进行处理。
如果有人知道如何做到这一点,谢谢你帮助我!
提前谢谢!!!
答案 0 :(得分:1)
所提供的格式中没有row
。日志中还有一个不必要的空间。
试试console.log(this.state.data[0];
答案 1 :(得分:0)
它返回一个Row的实例。所以通常如果我做"this.state.data [0] .row"
它应该给我一个字符串数组,因为Row有一个属性"row: string []"
答案 2 :(得分:0)
我同意Barazu。让我对问题采取不同的方法。您要获取的数据字段本身是“行”类型。我已经稍微调整了Axios请求以进行演示。 (提前格式化道歉)
axios.get("myURL").then(res: AxiosResponse<Row> => { // added a type here to res
const response = res.data; // response is a Row[]
this.setState({ data: response });
}).catch(error => {
console.log(error);
})
此处,Axios使用泛型来声明有效负载(数据字段)的类型为Row不是'data'上的字段或属性,但'data'的类型为'Row []'。
我不确定你需要在哪里迭代这些数据,但我会猜测它曾经是组件的状态。然后,一旦检索到数据,你应该可以做这样的事情
const myRows: Row[] = this.state.data;
for (const row of myRows) { console.log(myRow[0]); }