简体   繁体   English

Redux-添加到嵌套状态

[英]Redux - Adding to a nested state

I am building a calendar app. 我正在构建一个日历应用程序。 I have state set up in a nested structure. 我在嵌套结构中设置了状态。 I want to add a single item to my nested structure. 我想将一个项目添加到我的嵌套结构中。 I am unsure how to do it in Redux. 我不确定如何在Redux中执行此操作。

Here is my initialState: 这是我的initialState:

export const initialState = {
    modalActivated: false, 
    modalContent: null,
    days: [
        {
            day: 'Sunday', 
            slots: [
                {time: '12:00am', events: []}, {time: '1:00am', events: []}, {time: '2:00am', events: []}, {time: '3:00am', events: []}, 
                {time: '4:00am', events: []}, {time: '5:00am', events: []}, {time: '6:00am', events: []}, {time: '7:00am', events: []}, 
                {time: '8:00am', events: []}, {time: '9:00am', events: []}, {time: '10:00am', events: []}, {time: '11:00am', events: []}, 
                {time: '12:00pm', events: []}, {time: '1:00pm', events: []}, {time: '2:00pm', events: []}, {time: '3:00pm', events: []}, 
                {time: '4:00pm', events: []}, {time: '5:00pm', events: []}, {time: '6:00pm', events: []}, {time: '7:00pm', events: []}, 
                {time: '8:00pm', events: []}, {time: '9:00pm', events: []}, {time: '10:00pm', events: []}, {time: '11:00pm', events: []}, 
            ]
        },
        {
            day: 'Monday', 
            slots: [
                {time: '12:00am', events: []}, {time: '1:00am', events: []}, {time: '2:00am', events: []}, {time: '3:00am', events: []}, 
                {time: '4:00am', events: []}, {time: '5:00am', events: []}, {time: '6:00am', events: []}, {time: '7:00am', events: []}, 
                {time: '8:00am', events: []}, {time: '9:00am', events: []}, {time: '10:00am', events: []}, {time: '11:00am', events: []}, 
                {time: '12:00pm', events: []}, {time: '1:00pm', events: []}, {time: '2:00pm', events: []}, {time: '3:00pm', events: []}, 
                {time: '4:00pm', events: []}, {time: '5:00pm', events: []}, {time: '6:00pm', events: []}, {time: '7:00pm', events: []}, 
                {time: '8:00pm', events: []}, {time: '9:00pm', events: []}, {time: '10:00pm', events: []}, {time: '11:00pm', events: []}, 
            ]
        },
        {
            day: 'Tuesday', 
            slots: [
                {time: '12:00am', events: []}, {time: '1:00am', events: []}, {time: '2:00am', events: []}, {time: '3:00am', events: []}, 
                {time: '4:00am', events: []}, {time: '5:00am', events: []}, {time: '6:00am', events: []}, {time: '7:00am', events: []}, 
                {time: '8:00am', events: []}, {time: '9:00am', events: []}, {time: '10:00am', events: []}, {time: '11:00am', events: []}, 
                {time: '12:00pm', events: []}, {time: '1:00pm', events: []}, {time: '2:00pm', events: []}, {time: '3:00pm', events: []}, 
                {time: '4:00pm', events: []}, {time: '5:00pm', events: []}, {time: '6:00pm', events: []}, {time: '7:00pm', events: []}, 
                {time: '8:00pm', events: []}, {time: '9:00pm', events: []}, {time: '10:00pm', events: []}, {time: '11:00pm', events: []}, 
            ]
        },
        {
            day: 'Wednesday', 
            slots: [
                {time: '12:00am', events: []}, {time: '1:00am', events: []}, {time: '2:00am', events: []}, {time: '3:00am', events: []}, 
                {time: '4:00am', events: []}, {time: '5:00am', events: []}, {time: '6:00am', events: []}, {time: '7:00am', events: []}, 
                {time: '8:00am', events: []}, {time: '9:00am', events: []}, {time: '10:00am', events: []}, {time: '11:00am', events: []}, 
                {time: '12:00pm', events: []}, {time: '1:00pm', events: []}, {time: '2:00pm', events: []}, {time: '3:00pm', events: []}, 
                {time: '4:00pm', events: []}, {time: '5:00pm', events: []}, {time: '6:00pm', events: []}, {time: '7:00pm', events: []}, 
                {time: '8:00pm', events: []}, {time: '9:00pm', events: []}, {time: '10:00pm', events: []}, {time: '11:00pm', events: []}, 
            ]
        },
        {
            day: 'Thursday', 
            slots: [
                {time: '12:00am', events: []}, {time: '1:00am', events: []}, {time: '2:00am', events: []}, {time: '3:00am', events: []}, 
                {time: '4:00am', events: []}, {time: '5:00am', events: []}, {time: '6:00am', events: []}, {time: '7:00am', events: []}, 
                {time: '8:00am', events: []}, {time: '9:00am', events: []}, {time: '10:00am', events: []}, {time: '11:00am', events: []}, 
                {time: '12:00pm', events: []}, {time: '1:00pm', events: []}, {time: '2:00pm', events: []}, {time: '3:00pm', events: []}, 
                {time: '4:00pm', events: []}, {time: '5:00pm', events: []}, {time: '6:00pm', events: []}, {time: '7:00pm', events: []}, 
                {time: '8:00pm', events: []}, {time: '9:00pm', events: []}, {time: '10:00pm', events: []}, {time: '11:00pm', events: []}, 
            ]
        },
        {
            day: 'Friday', 
            slots: [
                {time: '12:00am', events: []}, {time: '1:00am', events: []}, {time: '2:00am', events: []}, {time: '3:00am', events: []}, 
                {time: '4:00am', events: []}, {time: '5:00am', events: []}, {time: '6:00am', events: []}, {time: '7:00am', events: []}, 
                {time: '8:00am', events: []}, {time: '9:00am', events: []}, {time: '10:00am', events: []}, {time: '11:00am', events: []}, 
                {time: '12:00pm', events: []}, {time: '1:00pm', events: []}, {time: '2:00pm', events: []}, {time: '3:00pm', events: []}, 
                {time: '4:00pm', events: []}, {time: '5:00pm', events: []}, {time: '6:00pm', events: []}, {time: '7:00pm', events: []}, 
                {time: '8:00pm', events: []}, {time: '9:00pm', events: []}, {time: '10:00pm', events: []}, {time: '11:00pm', events: []}, 
            ]
        },
        {
            day: 'Saturday', 
            slots: [
                {time: '12:00am', events: []}, {time: '1:00am', events: []}, {time: '2:00am', events: []}, {time: '3:00am', events: []}, 
                {time: '4:00am', events: []}, {time: '5:00am', events: []}, {time: '6:00am', events: []}, {time: '7:00am', events: []}, 
                {time: '8:00am', events: []}, {time: '9:00am', events: []}, {time: '10:00am', events: []}, {time: '11:00am', events: []}, 
                {time: '12:00pm', events: []}, {time: '1:00pm', events: []}, {time: '2:00pm', events: []}, {time: '3:00pm', events: []}, 
                {time: '4:00pm', events: []}, {time: '5:00pm', events: []}, {time: '6:00pm', events: []}, {time: '7:00pm', events: []}, 
                {time: '8:00pm', events: []}, {time: '9:00pm', events: []}, {time: '10:00pm', events: []}, {time: '11:00pm', events: []}, 
            ]
        }
    ]
}

If I had a day, time, title of event, how could I use Object.assign to edit the current structure and add a single string (the title) to the appropriate events array? 如果我有事件的日期,时间,标题,该如何使用Object.assign编辑当前结构并将单个字符串(标题)添加到适当的事件数组中? I use Object.assign all the time, but not with nested values like this. 我一直使用Object.assign,但不使用这样的嵌套值。

Any help would be appreciated! 任何帮助,将不胜感激!

initialState.days.forEach(dayObject => {
  if(dayObject.day == 'Sunday') dayObject = {...dayObject,title: 'someTitle'}

  console.log(dayObject);    
})

The above code will loop thru your current state , find the particular object that you wish to push title into, where in this case is Sunday , take all properties of object with days: sunday and push a new properties title 上面的代码将遍历您的当前state ,找到您想要将标题推送到的特定对象,在这种情况下为Sunday ,获取带天的对象的所有属性:sunday并推送新的属性title

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM