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

React函数组件中如何通过Props模拟数据?赋值报错求解

问题分析与解决方案

嘿,你遇到的问题核心在于直接修改组件的props是React不允许的——props是父组件传递给子组件的只读数据,组件内部不能直接覆盖或修改props对象,这就是你报错的原因。下面给你两种正确的模拟数据方式,以及如何渲染这些数据:

一、正确的模拟数据写法

方式1:函数参数解构+默认值(推荐,ES6+写法)

直接在函数参数里给props设置默认值,这样当父组件没有传递对应props时,就会自动使用你定义的模拟数据:

function MyComponent({ history = {}, data = [
  { name: 'XYZ' },
  { name: 'ABC' }
] }) {
  // 这里可以直接使用解构后的history和data变量
  return (
    <div>
      {/* 遍历渲染模拟数据里的名称 */}
      {data.map((item, index) => (
        <div key={index}>名称:{item.name}</div>
      ))}
    </div>
  )
}

方式2:使用defaultProps(兼容旧版本React)

如果你的项目还在使用较低版本的React,可以在组件外部定义默认props:

function MyComponent(props) {
  return (
    <div>
      {/* 通过props.data访问模拟数据 */}
      {props.data.map((item, index) => (
        <div key={index}>名称:{item.name}</div>
      ))}
    </div>
  )
}

// 给组件设置默认props
MyComponent.defaultProps = {
  history: {},
  data: [
    { name: 'XYZ' },
    { name: 'ABC' }
  ]
}

二、为什么之前的写法错误?

React遵循单向数据流原则,props是父组件向子组件传递数据的通道,子组件只能读取props,不能修改它。你直接在组件内部写props = {...}相当于强行覆盖了这个只读对象,违反了React的设计规范,所以会抛出错误。

三、后续替换为真实Store数据

等API就绪、Store里有真实数据后,只需要在父组件调用MyComponent时传递真实的data和history props即可:

// 父组件中从Store获取真实数据后传递
<MyComponent history={realHistory} data={realDataFromStore} />

这时候组件会自动使用父组件传递的真实数据,默认的模拟数据就会被覆盖,完全不用修改组件内部的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:47:27