【发布时间】:2021-06-23 05:49:41
【问题描述】:
import ChartContainer from "./Chart/ChartContainer";
import "./App.css";
function App() {
return <ChartContainer />;
}
export default App;
chartcontainer 组件有状态接口,为什么要期待 props?
// @ts-ignore
import axios from 'axios';
import React from 'react';
import Canvas from "./Canvas"
import { convertData } from "./Helpers"
type IState = {
data: unknown;
prevMonthStam: number;
}
const ChartContainer: React.FunctionComponent<IState> = () => {
const [data, setData] = React.useState<unknown>([])
const [prevMonthStamp, setPrevMonthStamp] = React.useState<number>()
React.useEffect(() => {
var d: any = new Date();
d.setMonth(d.getMonth() - 2);
d.setHours(0, 0, 0, 0);
setPrevMonthStamp((d / 1000 | 0) * 1000); //timestamp of a month ago
}, [])
React.useEffect(() => {
axios({
method: 'get',
url: 'http://binance.com/api/v3/klines?symbol=BTCUSDT&interval=1d'
}).then(res => {
if (prevMonthStamp) {
setData(res.data.filter((i: number[]) => i[0] >= prevMonthStamp))
}
}).catch(err => {
console.log(err)
})
}, [prevMonthStamp])
if (Array.isArray(data) && data?.length > 0) {
return (
<Canvas data={convertData(data)} />
);
} else {
return null
}
}
export default ChartContainer;
在这种情况下如何区分接口的道具和状态? 这也行不通,我定义了一个空的道具接口,它仍然在问同样的问题
指出它曾经以这种方式工作,直到我重新启动 ide
type IState = {
data: unknown;
prevMonthStam: number;
}
type IProps = {
}
const ChartContainer: React.FunctionComponent<IState & IProps>
【问题讨论】:
-
const ChartContainer: React.FunctionComponent<IState> = () =>你是说ChartContainer的类型是React.FunctionComponent,它会传入IState类型定义的道具。现在,您的组件收到了此处定义的 0 个道具= () =>。一个简单的= (props) =>应该可以解决它。但是,为什么你甚至不使用道具data或prevMonthStam时还要设置道具类型?此外,IProps或IState只是一个名称,没有任何意义。它不是state或props,它基本上是组件属性的结构 -
@Lith 好吧,我明白我没有道具。但我有两种状态。那些也不应该在接口中定义吗?这就是我想要做的。我不能为 props 定义一个接口,为 state 定义另一个接口吗?
-
类型或接口不用于此。我很快就会发布一个答案试图解释。
标签: reactjs typescript