如何根据接收到的值有条件地调用api



我需要调用一个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只将数字作为参数,我不知道其他方法,将非常感谢您的帮助

尝试使用:

...
if(param.filter(item => isNaN(item) )){
firstAPI(param)
} else {
secondAPI(param)
}
...

所以我几天前就解决了这个问题,但我忘了发布我的解决方案,所以它来了:

const handleExcelClick = (param: any) => {
if (typeof param === 'number') {
return firstAPI(param);
} else if (param.some((i: any) => typeof i === 'string')) {
return secondAPI(param);
}

};

我基本上忘记了在每个语句中添加一个返回,而且基于filter方法过滤值也没有意义,所以我使用了"一些";数组方法,如果条件满足,则只接收返回true的值,即检查数据类型是否与语句匹配

希望这能帮助任何试图做同样的人

最新更新