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

React如何动态构造state对象?避免构造函数重复赋值冗余代码

动态构建React组件State,摆脱重复手动赋值

嘿,手动写50个test1到test50的赋值代码确实够折腾的!我给你几个简洁的方法,轻松搞定这个重复工作:

方法一:for循环精准构建(推荐)

如果rowData里还有其他多余属性,只想提取test1到test50,用循环最靠谱:

constructor(props) {
  super(props);
  // 先解构出需要的rowData,让代码更清晰
  const { rowData } = props.navigation.state.params;
  const initialState = {};

  // 循环生成test1到test50的属性
  for (let i = 1; i <= 50; i++) {
    const key = `test${i}`;
    // 可选:如果rowData里可能没有对应属性,可以加默认值,比如 || ''
    initialState[key] = rowData[key];
  }

  this.state = initialState;
}

方法二:直接扩展rowData(适合属性完全匹配的场景)

如果rowData里的属性正好就是你需要的test1到test50,没有多余属性,那一行代码就能搞定:

constructor(props) {
  super(props);
  const { rowData } = props.navigation.state.params;
  // 把rowData的所有属性拷贝到state中
  this.state = { ...rowData };
}

方法三:用数组+Object.fromEntries(更函数式的写法)

如果你偏爱函数式风格,也可以用数组生成键名再转成对象:

constructor(props) {
  super(props);
  const { rowData } = props.navigation.state.params;
  // 生成test1到test50的键名数组
  const testKeys = Array.from({ length: 50 }, (_, idx) => `test${idx + 1}`);
  // 转成键值对数组后再生成对象
  const initialState = Object.fromEntries(
    testKeys.map(key => [key, rowData[key]])
  );

  this.state = initialState;
}

小提示

  • 要确保rowData中确实存在test1到test50这些属性,避免出现undefined;如果有属性可能缺失,可以给个默认值,比如rowData[key] || '默认值'。
  • 如果后续test的数量有变化(比如从50变60),只需要修改循环的终止条件或者数组的length就行,不用改几十行代码!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:58:13