如何将嵌套数组指定内容复制到React状态的新数组中
解决方案
你的days是一个包裹着单个对象的数组,这个对象的键为星期名称,对应的值就是你需要的目标数据集合。可以通过以下步骤完成状态设置:
- 从
days数组中取出唯一的外层对象(直接通过索引0访问即可) - 用接收到的星期名称(比如
"Monday")作为动态键,从外层对象中提取对应的值 - 调用
setDayValues将提取到的值更新为状态
代码示例
场景1:通过Props接收星期名称,自动更新状态
import { useState, useEffect } from 'react'; const days = [ { Monday: { value1: 1, value2: 2, value3: 3 }, Tuesday: { value4: 4, value5: 5, value6: 6 } } ]; function DayComponent({ targetDay }) { const [ dayValues, setDayValues ] = useState({}); useEffect(() => { // 获取数组中的唯一对象 const dayMap = days[0]; // 动态获取对应星期的数据,不存在则设为空对象 const selectedValues = dayMap[targetDay] || {}; // 更新状态 setDayValues(selectedValues); }, [targetDay]); // 当targetDay变化时重新执行 return ( <div> {Object.entries(dayValues).map(([key, val]) => ( <p key={key}>{key}: {val}</p> ))} </div> ); }
场景2:通过事件触发(比如按钮点击)设置状态
const handleSelectDay = (dayName) => { const dayMap = days[0]; setDayValues(dayMap[dayName] || {}); }; // 使用示例:<button onClick={() => handleSelectDay('Monday')}>选择周一</button>
关键说明
- 利用方括号语法
dayMap[dayName]实现动态对象属性访问,这是处理动态键名的核心方式 - 添加
|| {}是为了容错:如果传入的星期名称不存在,状态会被设为空对象,避免出现undefined导致的渲染问题
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

