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

React状态同步问题:点击联系人按钮后contact未随selectedId更新

React状态更新问题:点击联系人按钮后选中联系人未更新

你的问题核心是类型不匹配导致的:

按钮的value属性会自动将传入的数字转为字符串类型,而你的contact.id是数字类型。当你用===做全等比较时,字符串和数字永远不相等,所以contactList.find((c) => c.id === selectedId)始终找不到匹配项,contact自然不会更新。

两种解决办法:

1. 把按钮值转为数字

在handleButtonClick里将e.target.value转换为数字类型:

function handleButtonClick(e) {
    e.preventDefault()
    setSelectedId(Number(e.target.value));
}

2. 直接传递id参数(更推荐)

不用依赖按钮的value属性,直接在点击事件里传入contact.id:
修改ContactList组件:

export default function ContactList({ handleButtonClick, contacts }) {
  return (
    <div className="contact-buttons">
      {contacts.map((contact) => {
        return (
          <button
            key={contact.id}
            className="personName"
            onClick={() => handleButtonClick(contact.id)}
          >
            {contact.name}
          </button>
        );
      })}
    </div>
  );
}

然后更新父组件的handleButtonClick:

function handleButtonClick(id) {
    setSelectedId(id);
}

补充说明

setSelectedId确实会触发组件重渲染,但因为全等比较的类型不匹配,find方法无法定位到新选中的联系人,才导致contact看起来没有更新。解决类型匹配问题后,状态更新就能正常驱动contact的更新了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:32:15