You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chakra UI useCheckboxGroup onChange中value为旧值的问题求助

Chakra UI useCheckboxGroup onChange中value为旧值的问题

问题描述

我正在使用Chakra UI的CheckboxGroup,这是一个支持多选的复选框组组件。原本想用useCheckboxGroup Hook在复选框状态变更时获取当前选中值并传递给其他逻辑,但遇到了问题:onChange回调函数里的value是变更前的旧值,但在回调外部打印的value却是正确的最新状态,导致我没法在onChange里使用最新状态。想请教这是用法错误还是预期行为?

代码示例

const { value, getCheckboxProps} = useCheckboxGroup({
    onChange: () => {
        const checkBoxState = value as string[]
        console.log(checkBoxState)
        setSearchParams({ 'category': checkBoxState });
    },
});
console.log(value)

解决方案

这是useCheckboxGroup的预期设计,并非用法错误。该Hook的onChange回调会自动接收最新的选中值作为参数,你不需要依赖Hook返回的value(受闭包特性影响,回调里的value会捕获上一轮渲染的旧值)。

修改代码,直接使用回调参数即可获取最新状态:

const { value, getCheckboxProps} = useCheckboxGroup({
    onChange: (newValue) => {
        const checkBoxState = newValue as string[]
        console.log(checkBoxState)
        setSearchParams({ 'category': checkBoxState });
    },
});
console.log(value)

原理:Chakra UI在设计useCheckboxGroup时,会将更新后的选中集合作为参数传入onChange回调,目的就是让开发者直接拿到最新状态,避免闭包导致的旧值问题。

内容的提问来源于stack exchange,提问作者Dusan Stojanovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:20:35