javascript - 如何将功能作为 Prop 从一个功能组件传递到另一个功能组件?

标签 javascript reactjs react-functional-component

我将一个函数作为 Prop 从一个功能组件(仪表板)传递到另一个(事件)。但是,当我单击子组件上的按钮时,该按钮将传递的函数 Prop 保存在 onClick 值上,它会引发错误。
未捕获的类型错误:deleteEvent 不是函数
这是我在仪表板中的 deleteEvent 功能

  const deleteEvent = async (id) => {
    try {
      await Axios.delete(`/event/${id}`);
      const events = data.events.filter((event) => event.id !== id);
      setData({ ...data, events: events });
    } catch (err) {
      console.log(err);
    }
  };
这就是我在仪表板中渲染事件的方式。
{data.events.map((event, idx) => (
        <Event key={`event${idx}`} event={event} delete={() => deleteEvent} />
      ))}
这是我的 Event.jsx
const Event = ({
  event: { id, name, price, duration, schedule },
  delete: { deleteEvent },
}) => {
  console.log(deleteEvent);
  return (
    <div className="event" key={id}>
      <p>Name: {name}</p>
      <p>Price: {price}</p>
      <p>Duration - {duration}</p>
      <p>Schedule</p>
      {Object.keys(schedule).map((day) => (
        <p key={day}>
          {day} -{' '}
          {schedule[day].map((slot, idx) => (
            <span key={idx}>
              {slot.start} - {slot.start}
            </span>
          ))}
        </p>
      ))}
      <button type="button" onClick={() => deleteEvent(id)}>
        Delete Event{' '}
      </button>
    </div>
  );
};

当我单击按钮时,它会抛出 未捕获的类型错误:deleteEvent 不是函数 错误。
我究竟做错了什么 ?我以前使用基于类的组件来完成此操作。

最佳答案

当您传入 delete() 函数时,您正在创建一个返回 delete() 函数句柄的匿名函数,而不是传入函数本身。
你在哪里delete={() => deleteEvent} />您可以将函数本身作为 Prop 传递delete={deleteEvent} />在解构里面Event您只需要在 delete 下访问该函数即可。 key 而不是将其包裹在第二组 curl 中以拉出物体delete: deleteEvent

关于javascript - 如何将功能作为 Prop 从一个功能组件传递到另一个功能组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64436350/

相关文章:

javascript - React.js - 在 Render 中区分加载/空状态的简洁方法

reactjs - 在效果中 setState 之后 React 功能组件渲染两次

reactjs - 在 React 中使用 CDN

javascript - 如何使用 useState 设置对象数组的状态?

javascript - 基于 React promised 的 Confirm Modal 无法正常工作。一旦用户取消,在随后的模式打开时,即使用户确认,它也会被取消

javascript - 从 http header 响应中获取日期

javascript - 用于标记查询的 JavaScript 正则表达式

javascript - FB.login() 调用弹出窗口被 Google Chrome 阻止

javascript - javascript 中的概要

javascript - material-ui:无法设置图标菜单的样式