【问题标题】:React.: Set Value of field arrayReact.:设置字段数组的值
【发布时间】:2021-07-02 02:32:15
【问题描述】:

我定义了一个数组,看起来像

 const [weekDays, setWeekDays] = useState({
        a: [
            { id: 1, weekDay: 'MONDAY', isChecked: false },
            { id: 2, weekDay: 'TUESDAY', isChecked: false },
            { id: 3, weekDay: 'WEDNESDAY', isChecked: false },
            { id: 4, weekDay: 'THURSDAY', isChecked: false },
            { id: 5, weekDay: 'FRIDAY', isChecked: false },
            { id: 6, weekDay: 'SATURDAY', isChecked: false },
            { id: 7,  weekDay: 'SUNDAY', isChecked: false },
        ]
    });

另一个看起来像的数组

const [array, setArray] = useState([{"id":2,"messageId":1,"weekDay":"Tuesday"}])

现在我想比较数组并将一个数组字段的 isChecked 值设置为 true,如果工作日存在于另一个数组中。所以我想要类似的东西:

weekDays.a.map(weekDay => {
            array.map(row => {
                if (row.weekDay === weekDay.weekDay) {
                    setWeekDays([weekDay.isChecked = true])}
            })
        })

但我收到错误无法读取未定义 weekDays.a.map 的属性映射

setter如何正确完成?

【问题讨论】:

  • Ps.: weekDays 数组中的 String 值也是同样的写法。所以“星期二”而不是“星期二”。对不起。所以这不是问题。

标签: arrays reactjs react-hooks set field


【解决方案1】:

主要问题是您正在比较两个不同的字符串。我已经使用toUpperCase() 方法将字符串“Tuesday”的所有小写字符转换为大写,以便可以应用条件。

我已经使用索引号根据应用的条件将isChecked的值更改为true。

weekDays.a.map((weekDay, indexWeek) => {
array.map((row) => {
  if (weekDay.weekDay == row.weekDay.toUpperCase()) {
    console.log(weekDay, indexWeek);
    weekDays.a[indexWeek].isChecked = true;
  }
 });
});

【讨论】:

  • 谢谢 :) 我已经解决了这个问题。字符串现在是相同的,循环看起来像:weekDays.a.forEach(wd => { array.forEach(row => { if (row.weekDay === wd.weekDay) { wd.isChecked = !wd.isChecked } }) }) 但我仍然对某些东西感兴趣。那么,在您的解决方案中,您如何设置 indexWeek?有没有办法在 setWeekDay 设置器中执行此设置器?像setWeekDays(prevProps => (...prevProps, a.isChecked: true)) ??我正在寻找最佳实践:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多