React中能否在Axios内使用If语句动态切换请求URL?
问题原因及解决办法
你不能直接在axios.get()的参数位置写if/else if语句块,这不符合JavaScript语法规则,所以才会报Unexpected token错误。另外注意JavaScript里没有elif,正确写法是else if。
下面给你两种可行的写法:
写法一:先通过if-else确定URL再请求
const building_state = useSelector(state => state.building_state.building_state); console.log(building_state); const getRoomName = async(data) => { let url; if (building_state === "condo") { url = 'xxx.com'; } else if (building_state === "office") { url = 'xxx2.com'; } else if (building_state === "house") { url = 'xxx3.com'; } try { const result = await axios.get(url, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${cookies.get('accesstoken')}` }, }); console.log(result.data); setRoomName(result.data.home_rooms); } catch (err) { console.log(err); } }
这里用try/catch搭配async/await比.then/.catch更简洁,你也可以保留原有的.then写法,只要把确定好的url变量传进去即可。
写法二:用三元表达式(适合分支较少的场景)
const building_state = useSelector(state => state.building_state.building_state); console.log(building_state); const getRoomName = async(data) => { const url = building_state === "condo" ? 'xxx.com' : building_state === "office" ? 'xxx2.com' : 'xxx3.com'; // 可根据需求调整默认值 await axios.get(url, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${cookies.get('accesstoken')}` }, }) .then(result => { console.log(result.data) setRoomName(result.data.home_rooms); }) .catch(err => { console.log(err); }); }
总结:React+Axios里当然可以用if语句,但不能直接写在函数参数的括号内,得先把URL确定好再传给axios请求。
内容的提问来源于stack exchange,提问作者user20271619
相关产品推荐
相关产品推荐

