【问题标题】:"TypeError: events.map is not a function" I am gettting this error when ever I am creating a new event“TypeError:events.map 不是函数”我在创建新事件时遇到此错误
【发布时间】:2021-01-05 11:50:52
【问题描述】:

events.jsx

export default function Event({eventForm,setEventForm}) {
    const[data,setData]=useState(sampleData);
    function HandleCreateEvent(event) {
        setData(...data,event)
    }
    return(
    <Fragment>
     <Grid>
        <Grid.Column width={10}>
            <EventList events={data}/>
         </Grid.Column>
         <Grid.Column width={6}>
           {
               eventForm &&
               <EventForm setEventForm={setEventForm} setData={setData} createEvent={HandleCreateEvent}/>
           };
            
         </Grid.Column>
    </Grid>
    </Fragment>);
}

eventlist.jsx

 export default function EventList({events}){
     return(
        <Fragment>
        
        {events.map(event=>
            <EventListItem key={event.id} event={event}/>
        )}
        </Fragment>
    );    
  }

EventForm.jsx

export default function EventForm({setEventForm ,setData, createEvent})
{

const initialValues=
{
    title:'',
    company:'',
    description:'',
    city:'',
    venue:'',
    date:''
}

const[values,setValues]=useState(initialValues);
function handleFormSubmit()
{
    createEvent({...values,id:cuid(), hostedBy:"bob", attendees:[], hostPhotoURL:"/assets/default.png"});
    setEventForm(false);
}
function handleInputSubmit(e)
{
    const{name,value}=e.target
    setValues({...values,[name]:value});   
}

从 eventform.jsx 我以 JSON 格式传递数据并在 event.jsx 中接受它,然后在 Eventlist.jsx 中恢复它,但在 eventList.jsx 中显示错误。我正在这个函数中创建事件。

【问题讨论】:

  • 好吧,我的道具没有任何问题
  • github.com/Alphonse-03/events-manager这是链接,你可以看看吗
  • 这里有错误setData(...data,event),如果要添加新事件,应该是setData([...data,event])。您收到错误是因为您使用的是逗号运算符,在这种情况下,事件将等于最后一个操作数(事件)

标签: javascript reactjs rxjs react-router


【解决方案1】:

工作应用:Codesandbox

import React, { Fragment, useState } from "react";
import { Grid } from "semantic-ui-react";
import EventForm from "./EventForm";
import EventList from "./EventList";
import { sampleData } from "./eventData";
export default function Event({ eventForm, setEventForm }) {
  const [data, setData] = useState(sampleData);
  function HandleCreateEvent(event) {
    //set state like this ?
    setData([...data, event]);
  }
  return (
    <Fragment>
      <Grid>
        <Grid.Column width={10}>
          <EventList events={data} />
        </Grid.Column>
        <Grid.Column width={6}>
          {eventForm && (
            <EventForm
              setEventForm={setEventForm}
              createEvent={HandleCreateEvent}
            />
          )}
          ;
        </Grid.Column>
      </Grid>
    </Fragment>
  );
}

【讨论】:

  • 很好,非常感谢Ketan,你能解释一下你为什么使用这些括号吗??
  • 它所做的是,它将我们之前状态的元素,即data,解包并存储在新数组中,并将新元素event附加到之前的@ 987654325@ 元素。这就像 concat 操作。
  • 我们可以这样说,对于每一种 JSON 类型的数据,我们都需要一个方括号来解构它
猜你喜欢
  • 1970-01-01
  • 2019-11-26
  • 2018-04-27
  • 2020-08-18
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
相关资源
最近更新 更多