axios React useState比变量的真实的值晚1步

vybvopom  于 2023-01-05  发布在  iOS
关注(0)|答案(1)|浏览(122)

我知道这是重复的,但我不知道如何修复它在我的情况下,我发送了放置请求到服务器,但它有旧的值,我应该怎么办?
React代码:

const [sizeValue, setSizeValue] = useState(basketItem.clotheSize)
<select
   name={"size"}
   className={"sizeSelector"}
   value={sizeValue}
   onChange={e => {
      setSizeValue(e.target.value)
      updateClothesSize(basketItem.id, sizeValue)
   }}
>
  <option value="s">s</option>
  <option value="m">m</option>
  <option value="l">l</option>
  <option value="xl">xl</option>
  <option value="xxl">xxl</option>
</select>

axios代码:

export const updateClothesSize = async (id, size) => {
    const {data} = await $host.put('api/basket/' + id, {clothesSize: size})
    return data
}
osh3o9ms

osh3o9ms1#

useState不会立即更新状态值。您可以通过直接将值传递给updateClothesSize(basketItem.id, e.target.value)来解决此问题。或者使用useEffect来调用updateClothesSize

useEffect(() => {
  updateClothesSize(basketItem.id, sizeValue)
},[sizeValue])

相关问题