嘿,我在这里有些困惑。我在做什么错了,外部数组中的对象数组看起来像这样:
import moment from "moment";
export default [{
filterOn: "startDate",
startDate: moment("01/01/2013", "DD/MM/YYYY").startOf("day"),
endDate: moment().startOf("day")
}];
然后我通过props
导入了我的数组,例如:props.datePickerDefinition
我正在获取数组,然后尝试通过useState
和setState
将数组中的值提取到某些状态。
const [fromToDatePickerColumn, setFromToDatePickerColumn] = useState();
const [dateFrom, setDateFrom] = useState();
const [dateTo, setDateTo] = useState();
我的目标是使用useEffect
函数并使用开关盒来更新这三个元素的状态:
useEffect(() => {
props.datePickerDefinition.map((date) => {
switch (typeof date) {
case 'string':
setFromToDatePickerColumn(date.fromToDatePickerFilterOn)
break;
case'moment' :
setDateFrom(date.startDate)
setDateTO(date.endDate)
}
})
})
所以我首先有两个问题。我可以使用switch
大小写检查矩对象吗?第二个也是最重要的一个原因是为什么当我从.map
函数中提取值时会收到undefined
,但是如果我用props.datePickerDefinition.map((date) => console.log(date))
来检查值,就会看到它。有人可以帮我一下,我将不胜感激,以了解我在做什么错。
我尝试使用.forEach
函数:
const array1 = [{first:'a', second:'b', third:'c'}];
const test = array1.forEach(element => element.first);
console.log(test)
还有.map:
const array1 = [{first:'a', second:'b', third:'c'}];
const test = array1.map(element => element.first);
console.log(test)
但是在这种情况下,它返回我["a"]
,而我只需要值而无需Array
答案 0 :(得分:1)
您需要再次遍历日期以设置状态。但是地图不适合这里。 尝试以下代码:
useEffect(() => {
props.datePickerDefinition.forEach(date =>{
for(let key in date){
const dateItem = date[key];
switch (typeof dateItem) {
case 'string':
setFromToDatePickerColumn(date.filterOn);
break;
case 'object' :
setDateFrom(date.startDate);
setDateTo(date.endDate);
break;
default: break;
}
}
})
})
答案 1 :(得分:0)
在地图的开关盒内添加return语句