如何在反应中将自定义onClick函数从父级传递给子级

伊利亚·李

我正在工作一个弹出组件,其中父组件具有以下代码

import * as React from "react";
import "./styles.css";
import Popup from "./Popup";

export default function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <Popup
        src="https://picsum.photos/200"
        alt="Fog"
        coreValue="Customer Focus"
      />
      <Popup
        src="https://picsum.photos/200/300?grayscale"
        alt="Grey Mountains"
        coreValue="Persistence"
      />
    </div>
  );
}

子组件应根据道具呈现自定义弹出窗口

import * as React from "react";
import { useState } from "react";

interface Props {
  src: string;
  alt: string;
  coreValue: string;
}

export default function Popup({ src, alt, coreValue }: Props): JSX.Element {
  const [customerFocus, setCustomerFocus] = useState(false);
  const [persistence, setPersistence] = useState(false);

  const toggleCustomerFocus = () => {
    setCustomerFocus(!customerFocus);
  };

  const togglePersistence = () => {
    setPersistence(!persistence);
  };

  const data = [
    {
      customerFocus: {
        title: "Dummy Title 1",
        content: "Dummy Content 1"
      },
      persistence: {
        title: "Dummy Title 2",
        content: "Dummy Content 2"
      }
    }
  ];
  return (
    <>
      <figure onClick={toggleCustomerFocus}>
        <img src={src} alt={alt} />
        <figcaption>{coreValue}</figcaption>
      </figure>
      {customerFocus && (
        <section>
          <h4>{data[0].customerFocus.title}</h4>
          <p>{data[0].customerFocus.content}</p>
          <button onClick={toggleCustomerFocus}>Close 1</button>
        </section>
      )}
      {persistence && (
        <section>
          <h4>{data[1].persistence.title}</h4>
          <p>{data[1].persistence.content}</p>
          <button onClick={togglePersistence}>Close 2</button>
        </section>
      )}
    </>
  );
}

在哪里<figure onClick={toggleCustomerFocus}>,我想将自定义onClick函数从父级传递到其子级,以便第一个弹出窗口在单击时呈现“虚拟标题1”和“虚拟内容1”,第二个弹出窗口在单击时呈现“虚拟标题2”和“虚拟内容2”。截至目前,两者在单击时均呈现相同的弹出窗口。

如何将自定义onClick函数从父级发送给子级?

Codesandbox链接

卡萨夫

尽管您可以从父App组件传递状态和设置器,但是对于您的示例而言,这没有多大意义。

我会尝试使Popup组件更通用。

在下面的示例中,Popup组件管理自己的UI状态(打开/关闭),但是所有内容均作为道具传递。

import React, { useState } from "react";
import "./styles.css";

const data = [
  {
    title: "Customer Focus title",
    content: "Customer Focus content",
    src: "https://picsum.photos/200",
    alt: "Fog",
    coreValue: "Customer Focus"
  },
  {
    title: "Persistence title",
    content: "Persistence content",
    src: "https://picsum.photos/200/300?grayscale",
    alt: "Grey Mountains",
    coreValue: "Persistence"
  }
];

export default function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      {data.map(({ title, content, src, alt, coreValue }) => (
        <Popup
          title={title}
          content={content}
          src={src}
          alt={alt}
          coreValue={coreValue}
        />
      ))}
    </div>
  );
}

interface Props {
  title: string;
  content: string;
  src: string;
  alt: string;
  coreValue: string;
}

function Popup({
  title = "",
  content = "",
  src = "",
  alt = "",
  coreValue = ""
}: Props) {
  const [showDetails, setShowDetails] = useState(false);

  return (
    <>
      <figure onClick={() => setShowDetails(true)}>
        <img src={src} alt={alt} />
        <figcaption>{coreValue}</figcaption>
      </figure>
      {showDetails && (
        <section>
          <h4>{title}</h4>
          <p>{content}</p>
          <button onClick={() => setShowDetails(false)}>Close 2</button>
        </section>
      )}
    </>
  );
}

编辑弹出窗口(分叉)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在angular2+中将动态数据从父级传递给子级

如何在ReactJS / nextjs中将值从父级传递给子级

如何在重定向中将属性从父级传递给子级

组件渲染后如何在reactJS中将数据从父级传递给子级

在基于反应类的组件中将道具从父级传递给子级

无法在 Angular 中将值从父级传递给子级

在Angular中将异步数据从父级传递给子级

在vuejs中将状态从父级传递给子级

React - 如何在回调函数中将参数从子级传递给父级(onClick)

将 onClick 函数从父级传递给子级,在页面渲染时自动调用它

C#wpf-如何在自定义控件中将文本框错误传递给父级

如何在掌舵时将变量从父级传递给子级?

如何在React Router上将Pros数据从父级传递给子级

如何在flutter中将设置状态值的更改从父级传递到子级?

无法读取反应中未定义的属性“道具”,将数据从父级传递给子级

如何在F#中将自定义日期格式传递给CsvProvider

表单 - 如何在 Symfony 4 中将自定义选项传递给 CollectionType 子项

如何在Azure AD App中将自定义属性传递给重定向URL?

如何在Angular 5反应性表单中将表单控制值传递给自定义验证函数的参数

如何在React中将componentDidMount函数传递给深层子级

如何在PostgreSQL中将自定义类型的多维数组作为函数参数传递?

反应,将值从父级传递给两个不同的子级

无法在wxPython中将自定义Sizer作为父级添加到其子级小部件

在ReactJS Hooks中将数据/变量从父级传递给子级

在vue.js中将数据从父级传递给子级

从父级传递事件到子级反应未定义

如何从父级在 Iframe 中调度自定义事件?

如何在Angular中将类样式从父级传递到子级,并在特定元素中使用它

如何在C ++ 11中将自定义分配器传递给std :: basic_ostringstream?