2021铁人赛
React
本篇要将call api的功能独立成一个元件,在架构上会更清楚的分工不同档案的功能,之後也有可能是其他元件会呼叫api的功能,因此独立出来会比较方便。
如下程序码,将原本在Card.js内call api获取资料的那段分离出来,另外写在一个档案。
src/components/Charts/fredAPI.js
const useFredAPI = (series_id) => {
return fetch(`${process.env.REACT_APP_PROXY_SERVER_URL}/series/observations?series_id=${series_id}&api_key=${process.env.REACT_APP_API_KEY}&file_type=json`, {
headers: {
'Target-URL': 'https://api.stlouisfed.org/fred'
}
})
.then((response) => response.json())
.then((data) => {
let seriesData = [];
data.observations.forEach(ob => {
seriesData.push([new Date(ob.date).getTime(), Number(ob.value)]);
});
return seriesData;
})
};
export default useFredAPI;
src/components/Charts/Card.js
import styles from './Card.module.css';
import Highcharts from 'highcharts/highstock';
import HighchartsReact from 'highcharts-react-official';
// import api呼叫元件
import fredAPI from './fredAPI';
const Card = (props) => {
const [chartOption, setChartOption] = useState({
...
});
// 使用async await,确保等待非同步的call api函数获取到资料後才进行state update
const fetchData = useCallback(async (series_id) => {
try {
const seriesData = await fredAPI(series_id);
setChartOption((prevOption) => {
return {
...prevOption,
series: [
{
name: prevOption.series[0].name,
data: seriesData
}
]
}
})
} catch (error) {
console.log(error)
}
}, []);
useEffect(() => {
fetchData(props.item.series_id);
}, [fetchData, props]);
return (
...
)
}
export default Card;
上述程序码将call api功能分离之後,看起来有比较乾净一些,主要把资料处理的流程搬移,就可以很快速地看出整个程序的架构,就是定义state,定义update state的方式,定义effect,回传JSX。
接下来几篇,就开始做下拉式选单功能,就是依照类别去筛选要呈现的图表,以及分页功能,当同一页的图表超过3个的时候,就可以点下一页去看更多图表。
谈谈堆积(Heap)吧! 今天来谈谈堆积(Heap)吧!堆积是一种特别的二元树(Binary tre...
Match是使用枚举的基本工具,类似Golang的Switch语法 Match取值後对每个条件进行比...
为什麽会参加铁人赛 因为工作关系需要从零开始接触php,并学习其框架laravel,当时主管问我有没...
现况 以YOLOv4模型框选中文字後,将资料集(约7万张)区分为以下类别: 1.1 word(仅有1...
上一篇有提到,我们porting时发生printf()在有format string印不出东西、se...