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

为何在Preact中通过JSX组件访问对象键值会变为undefined?

问题原因及解决方法

你遇到的问题核心在于**key是Preact的特殊属性,不会作为组件props传递到组件内部**。

错误原因解析

在列表渲染场景中,key是Preact用来追踪元素唯一性、优化重渲染效率的特殊标识。当你给组件传递key={key}时,Preact会直接将该值用于diff算法的对比逻辑,不会把它纳入组件的props对象中。因此你的Element组件尝试解构{ key, value }时,key会是undefined,最终渲染出: a、: b这类缺失键名的结果。

解决方法

将组件接收的键名参数换成非key的名称(比如propKey),同时保留key作为列表元素的唯一标识:

function Element({ propKey, value }) {
  return (<>{propKey}: {value}<br></br></>);
}

export default function Component() {
  const obj = { a: 'a', b: 'b'} 
  const elements = [];
  for (const [key, value] of Object.entries(obj)) {
    elements.push(<Element key={key} propKey={key} value={value} />)
  }
  return (
    <article>
      {elements}
    </article>
  );
}

这样既满足了Preact对列表元素key的要求,又能在组件内部正常获取并渲染键名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:33:16