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

React中如何动态修改State对象已有属性而非新增键?

问题修复方案

你的问题出在toggleMenu函数的对象赋值写法上——直接写menuItem: !people[menuItem]时,JavaScript会把menuItem当作字面量键名,而不是你传入的变量对应的键,所以才会新增一个menuItem属性。

要解决这个问题,需要使用计算属性名(把变量放在方括号[]里),这样就能动态对应到传入的键:

const toggleMenu = (menuItem: keyof typeof people) => {
  setPeople({ ...people, [menuItem]: !people[menuItem] });
};

修复后,当你传入"company"时,方括号会解析变量值作为键,就会正确修改company属性的布尔值,而不会新增多余键。

完整修复后的代码:

import "./styles.css";
import { useEffect, useState } from "react";

export default function App() {
  interface filter {
    company: boolean;
    gender: boolean;
  }
  const [people, setPeople] = useState<filter>({
    company: false,
    gender: false,
  });

  useEffect(() => {
    console.log(people);
  }, [people]);


  const toggleMenu = (menuItem: keyof typeof people) => {
    setPeople({ ...people, [menuItem]: !people[menuItem] });
  };


  return (
    <div className="App">
      <button
        className="flex flex-row justify-center w-full"
        onClick={() => toggleMenu("company")}
      >
        Click me 
      </button>
    </div>
  );
}

内容的提问来源于stack exchange,提问作者Random Data Monster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:54:57