React中如何在axios的patch请求内动态添加ID参数?
问题原因
你收到id未定义的报错,核心原因是postData函数的作用域内没有可访问的id变量,和你用function还是const定义函数无关。
解决方法
方案1:将ID作为参数传入函数
改写postData,接收id作为入参:
// 函数定义,入参接收动态ID const postData = (id) => { // 注意需确保作用域内可正常访问API_KEY、change两个变量 axios.patch(`classrooms/${id}?api_key=${API_KEY}`, `subject=${change}`) .then((res) => console.log(res.data)) .catch((err) => console.log(err)); }
绑定点击事件时传入对应ID即可,不同场景写法如下:
- React/Vue 模板绑定:
// 替换为你的实际业务中对应的动态ID变量 <button onClick={() => postData(item.id)}>提交修改</button>
- 原生JS绑定:
先给点击元素加自定义属性存储ID:
<button class="edit-btn" data-id="123">修改ID为123的条目</button>
再绑定事件获取ID调用函数:
document.querySelectorAll('.edit-btn').forEach(btn => { btn.addEventListener('click', () => { const targetId = btn.dataset.id; postData(targetId); }) })
方案2:函数内部实时获取ID
如果ID存储在页面输入框、全局变量等位置,可以直接在函数内部读取:
function postData(){ // 示例:从ID输入框读取值,可根据你的实际业务场景修改获取逻辑 const id = document.querySelector('#classroom-id-input').value; axios.patch(`classrooms/${id}?api_key=${API_KEY}`, `subject=${change}`) .then((res) => console.log(res.data)) .catch((err) => console.log(err)); }
注意事项
- 需保证
API_KEY、change两个变量在postData的作用域内可正常访问,否则同样会触发未定义报错 - 模板字符串必须用反引号
`包裹,你当前代码的模板字符串语法是正确的,无需修改
内容的提问来源于stack exchange,提问作者Try
相关产品推荐
相关产品推荐

