[英]Wrong pass prop in react component
我有简单的Reactjs应用程序,其中包括Card
和Modal
组件。 每张Card
都必须有一个Modal
,当点击“显示更多”按钮时,打开它。
模态应该只在它的卡片上显示标题,我的问题是传递道具给模态,只发送最后一张Card
的title
而不是关于它本身!
综上所述,在 Card 组件中正确接收到title
的 prop,但 Card 组件无法将title
正确传递给 Modal。
这是我在 CodeSandBox 中的应用程序: Demo
卡组件:
const Card = props => {
const { children, title } = props;
const { isShowModal, setIsShowModal } = useContext(MainContext);
const showModalHandler = () => {
setIsShowModal(true);
};
return (
<div className="card">
<div className="card-header">
<h2>{title}</h2>
</div>
<div className="card-content">{children}</div>
<div className="card-footer">
<button onClick={showModalHandler}>Show More</button>
</div>
{isShowModal && <Modal title={title} />}
</div>
);
};
模态组件:
const Modal = props => {
const { setIsShowModal } = useContext(MainContext);
const closeModalHandler = () => {
setIsShowModal(false);
};
const { title } = props;
return (
<div className="modal">
<h2>Modal: {title}</h2>
<p>
You cliked on <b>{title}</b> Card
</p>
<hr />
<button onClick={closeModalHandler}>Close</button>
</div>
);
};
注意:我在isShowModal
state 中使用 Context 控制打开/关闭模式,也许这就是问题所在?
正如您认为问题似乎是您正在使用的useContext
。 所以我对代码进行了一些更改,最重要的是使用useState
。 我建议您阅读有关useContext
以及何时使用它的文档。 这是更新的代码:
Card.js
import React, { useState } from "react";
import Modal from "./Modal";
import "./Card.scss";
const Card = props => {
const { children, title } = props;
const [ isShowModal, setIsShowModal ] = useState(false);
return (
<div className="card">
<div className="card-header">
<h2>{title}</h2>
</div>
<div className="card-content">{children}</div>
<div className="card-footer">
<button onClick={() => setIsShowModal(true)}>Show More</button>
</div>
{isShowModal && <Modal setIsShowModal={setIsShowModal} title={title} />}
</div>
);
};
export default Card;
Modal.js
import React from "react";
import "./Modal.scss";
const Modal = props => {
const { title } = props;
return (
<div className="modal">
<h2>Modal: {title}</h2>
<p>
You cliked on <b>{title}</b> Card
</p>
<hr />
<button onClick={() => props.setIsShowModal(false)}>Close</button>
</div>
);
};
export default Modal;
如您所见, Modal.js
组件不必是有状态的组件。 您可以将来自Card.js
组件的setIsShowModal
function 作为道具传递。 这样您就可以使模态成为可重用的组件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.