我需要调用一个api,这取决于它在状态上接收到的值,
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
const [selectedValue, setSelectedValue] = useState([])
const firstAPI = async (val) => {
return await axios
.get(`http://localhost:3000/api/v1/rendition?name=${val}&&excel=true`)
.then(res => console.log('excel', res))
}
const secondAPI = async (val) => {
const limit = pageSize * (page - 1);
return await axios
.get(`http://localhost:3000/api/v1/rendition?id=${val}&&skip=${limit}&&take=${pageSize}&&excel=true`)
.then((res) => {
console.log('excelID', res);
})
}
const handleExcelClick = (param) => {
if(param.filter(item => typeof item === 'string')){
firstAPI(param)
} else {
secondAPI(param)
}
}
<Button onClick={() => handleExcelClick(selectedValue)} > Excel </Button>
因此,我从两个不同的输入中重新计算一个值,这些输入存储在selectedValue状态中,可以是字符串,也可以是数字,所以我需要根据值调用api,如果是字符串,调用firstAPI,如果是数字,调用secondAPI。但是,不管我输入了什么条件,它都会忽略if语句,只调用第一个api,它也会触发500个错误,因为其中一个api只以数字作为params,我不知道其他方法来处理这个问题,任何帮助都是非常感谢的。
发布于 2021-12-14 03:29:25
所以我在很多天前就解决了这个问题,但是我忘了发我的解决方案,所以就这样:
const handleExcelClick = (param: any) => {
if (typeof param === 'number') {
return firstAPI(param);
} else if (param.some((i: any) => typeof i === 'string')) {
return secondAPI(param);
}
};
我基本上忘记了向每个语句添加一个返回,基于一个筛选方法过滤值也没有意义,所以我使用“一些”数组方法来接收如果满足条件返回true的值,这就是检查数据类型是否与语句匹配。
希望这能帮助任何想要做同样事情的人
发布于 2021-12-09 07:08:26
试着:
...
if(param.filter(item => isNaN(item) )){
firstAPI(param)
} else {
secondAPI(param)
}
...
https://stackoverflow.com/questions/70281466
复制相似问题