如何在子 React 组件中调用父函数?

How can I call parent function in a child React component?

所以我想添加删除按钮,但是当我点击它时我看到错误: 'TypeError: props.onDeleteTask is not a function' - 在组件中 - SingleTask.js

//../components/SingleTask.js
  (...)
  function deleteTask(props){
    const dataId =  props.id;

    props.onDeleteTask(dataId)
  }
(...)
      <div className={classes.delete}>
        <img onClick={deleteTask} src="/delete.png" alt="delete" />
      </div>

///

//../components/AllTask.js
const AllTask = (props) => {

  return (
    <ul className={classes["all-tasks"]}>
      {props.tasks.map((task) => (
        <SingleTask
          key={task.id}
          id={task.id}
          title={task.title}
          priority={task.priority}
          start_date={task.start_date}
          complete={task.complete}
          description={task.description}
          onDeleteTask={props.onDeleteTask}
        />
      ))}
    </ul>

//

//../pages/index.js

function Home(props) {

  async function deleteTaskHandler(enteredTaskData) {
    const response = await fetch("/api/helper", {
      method: "DELETE",
      body: JSON.stringify(enteredTaskData),
      headers: {
        "Content-Type": "application/json",
      },
    });

    const data = await response.json();
    console.log(data);

  }

  return (
    <Fragment>
      <AllTask tasks={props.tasks} onDeleteTask={deleteTaskHandler} />
    </Fragment>
  );
}

////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// /

您的“功能”并不是 onDeleteTask 的真正功能 您需要调用 function

尝试在 ../components/SingleTask.js 文件中修复此问题

      <div className={classes.delete}>
        <img onClick={() => deleteTask()} src="/delete.png" alt="delete" />
      </div>

我建议你使用 useContext 它可以帮助你更好地使用这些 life cycle components 期货,也可以避免 drilling props.

我认为您的错误是因为 OnClick 事件向该事件的函数发送了 1 个参数。在您的情况下,函数 deleteTask 正在接收事件作为您命名为“props”的参数。您可以使用以下语法解决此问题:

onClick={() => deleteTask()}

或者只是从你的函数声明中删除 params 道具,因为你看起来不像你在使用事件。

function deleteTask(){ ...

您正在将 deleteTask 函数绑定到将点击事件作为参数传递的 onClick。该功能将其作为命名道具获取。 所以,道具是 属性 你正在传递到 SingleTask 组件。

请尝试更改代码部分如下:

//../components/SingleTask.js

  ...
  const {onDeleteTask, id} = props;
  ...
  <div className={classes.delete}>
    <img onClick={() => onDeleteTask(id)} src="/delete.png" alt="delete" />
  </div>

有道理吗?