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

React/Next.js select onChange设置state后选中值未同步生效问题

问题根因

  • defaultValue仅在组件首次渲染时生效,后续state更新不会同步到select组件,受控组件必须使用value属性做绑定。
  • 值匹配逻辑错误:
  • setSelectedSubNav是异步更新接口,调用后立刻打印selectedSubNav拿到的是更新前的旧值,属于React的正常设计,不代表state更新失败。
  • 首次进入页面时没有根据当前路由初始化选中值,默认选中为空,也会导致初始状态不匹配。

修复代码

这里我们统一用路由地址作为select的绑定值,匹配逻辑更直观,修改后代码如下:

import { useState, useEffect } from 'react'
// 以下是Next.js路由的导入示例,其他框架根据自身路由能力调整即可
import { useRouter, usePathname } from 'next/navigation' 
import type { ChangeEvent } from 'react'

const navigation = [
    { name: 'Profil', href: '/unternehmen/profil' },
    { name: 'Geschichte', href: '/unternehmen/geschichte' },
]

const SubNavigation = () => {
    const [selectedSubNav, setSelectedSubNav] = useState('')
    const router = useRouter()
    const currentPath = usePathname() // Next.js 13+获取当前路径方法,旧版本用router.asPath

    // 初始化及路由变化时同步选中状态
    useEffect(() => {
        const matchNav = navigation.find(nav => nav.href === currentPath)
        if (matchNav) setSelectedSubNav(matchNav.href)
    }, [currentPath])

    const onSubNavChange = (e: ChangeEvent<HTMLSelectElement>) => {
        e.preventDefault()
        const targetHref = e.target.value
        setSelectedSubNav(targetHref)
        router.push(targetHref)
    }

    return (
        <div className="relative pb-5 sm:pb-0">
            <div className="mt-4">
                <div className="sm:hidden">
                    <select
                        id="current-tab"
                        name="current-tab"
                        value={selectedSubNav}
                        onChange={onSubNavChange}
                    >
                        {navigation.map((navItem) => (
                            <option value={navItem.href} key={navItem.name}>
                                {navItem.name}
                            </option>
                        ))}
                    </select>
                </div>
            </div>
        </div>
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:08