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
相关产品推荐
相关产品推荐

