代码之家  ›  专栏  ›  技术社区  ›  SomeStudent

Typescript react,如何设置数组的状态

  •  0
  • SomeStudent  · 技术社区  · 4 年前

    我目前面临一个问题,我正在从我的API获取数据,然后我想操纵数据来创建一个名为events的数组,我可以使用它传递给我的日历。我正在尝试以下操作:

    const createEvents = () => {
            workouts.map((w)=> {
                setEvents(...events, 
                {           
                    id: w.id,
                    title: w.name,
                    date: w.dateOfWorkout
                });
    
            });
    

    https://daveceddia.com/usestate-hook-examples/ )有一个和上面很相似的例子。我将我的事件定义如下:

    const [events, setEvents] = useState([]);
    

    myData.Select(x => new {
    Id = x.Id,
    ...
    })
    
    2 回复  |  直到 4 年前
        1
  •  2
  •   monsty    4 年前

    你可以试着把你的论点放入数组中吗?

    setEvents([
    //--------^
      ...events, 
      {           
        id: w.id,
        title: w.name,
        date: w.dateOfWorkout
      }
    ]);
    

    顺便说一句,即使它在工作,我也不会在映射(或任何其他循环)内调用setEvents,不应该这样使用它。

    const createEvents = () => {
      setEvents([...events,
        workouts.map((w) => ({
          id: w.id,
          title: w.name,
          date: w.dateOfWorkout
        }))
      ]);
    };
    
        2
  •  1
  •   Maximiliano Poggio    4 年前

    const newEvents = 
            workouts.map((w)=> ({
                    ...events,
                    id: w.id,
                    title: w.name,
                    date: w.dateOfWorkout
                })
            )
    

    然后,您可以拨打:

    setEvents(newEvents)
    

        3
  •  0
  •   SomeStudent    4 年前

    与其说是回答,不如说是感谢那些回答的人。使用你的答案,同时阅读更多关于react/mobx的内容。我意识到,为了实现我的目标,我需要做的是在我的WorkoutStore.ts中创建一个计算属性,如下所示:

    @计算的获取事件(){ const data=this.workouts.map((w)=>({ 身份证号:w.id, 日期:工作日期 }))

        return data;
    };
    

    const {getWorkouts, events} = root.workoutStore;
    
        useEffect(() => {
            console.log("In here");
            if(match.params.id) {
                getWorkouts(match.params.id);
            }
        }, [match.params.id, getWorkouts])
    

    安装之后,我现在可以轻松地 events={events} 在我的完整日历组件中。将其转移到存储区的原因是,否则(我假设是由于操作顺序等原因),workout对象总是空的,因此没有从中计算事件。

    再次感谢麦克斯,感谢蒙蒂把我引向正确的方向