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

React开发中无法将prop传入字典获取对应颜色值如何解决

问题原因

代码的核心错误是字典取值时错误地将colour变量包装成了对象,导致无法匹配到字典内的字符串键:

  • 你写的colourPrimaryDict[{ colour }]等价于先创建了一个{ colour: "pink" }的对象,再用这个对象作为键去字典取值
  • JavaScript中所有非字符串类型的对象作为对象键时,都会被自动调用toString()方法转为[object Object]字符串,自然无法匹配到字典里的pink键,所以最终取到的值是undefined

解决方案

最简修复

直接删除取值语句里多余的大括号即可,修改后的组件返回部分代码:

return (
    <div className={container} style={{
        backgroundColor: colourPrimaryDict[colour],
        color: colourSecondaryDict[colour]
    }}>
        { colour }
    </div>
)

更优实现方案

可以将两个独立的颜色字典合并为一个嵌套结构,减少重复维护成本,同时增加边界兼容逻辑,避免传入未定义的颜色值时样式异常:

import * as React from 'react'
import { container } from './zoneButton.module.css'

// 统一维护颜色映射,后续新增色值直接扩展该对象即可
const colourMap = {
  pink: {
    primary: 'var(--pastel-pink-primary)',
    secondary: 'var(--pastel-pink-secondary)'
  },
  blue: {
    primary: 'var(--pastel-blue-primary)',
    secondary: 'var(--pastel-blue-secondary)'
  }
}

const ZoneButton = ({ colour }) => {
  // 匹配不到对应色值时默认使用pink配置,可根据业务需求调整默认值
  const currentColour = colourMap[colour] ?? colourMap.pink
  return (
    <div 
      className={container} 
      style={{
        backgroundColor: currentColour.primary,
        color: currentColour.secondary
      }}
    >
      { colour }
    </div>
  )
}

export default ZoneButton

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:39:03