javascript - 如何将类添加到传递的组件
问题描述
当试图将一个组件作为另一个组件的 prop 传递时,一切正常。但是,如果我想传递一个组件并在孩子内部处理它的 css 类,我现在迷路了。
在我看来,我试图实现类似的目标:
import Navbar from 'what/ever/path/Navbar/is/in/Navbar.js';
export default function ParentComponent {
return(
<Navbar NavIcon={<MyIcon/>} />
)
}
.... Imports etc...
export default function Navbar(props) {
const {NavIcon} = props;
return(
<Navigation>
// Now use the Prop as a Component and pass default classNames to it.
// So that we don't need to wrap everything inside a span / div etc.
<NavIcon className="AddCustomStylesAlwaysHere" />
</Navigation>
)
}
解决方案
我想到了两种方法:
传递一个组件
只需传递组件并让父级处理它的实例化。这样,您需要的唯一更改是确保<MyIcon />
接受一个className
道具:
const MyIcon = ({ className }) => {
return <div className={className} />
};
const Navbar = ({ NavIcon }) => {
return (
<Navigation>
<NavIcon className="AddCustomStylesAlwaysHere" />
</Navigation>
);
};
<Navbar NavIcon={MyIcon} />
传递一个元素实例
这样,您负责实例化组件,而父级只是呈现它。在这种情况下,您必须使用 React 实用程序来修改现有元素(https://reactjs.org/docs/react-api.html#cloneelement):
const MyIcon = ({ className }) => {
return <div className={className} />
};
const Navbar = ({ NavIcon }) => {
return (
<Navigation>
{React.cloneElement(NavIcon, { className: 'AddCustomStylesAlwaysHere' })}
</Navigation>
);
};
<Navbar NavIcon={<MyIcon />} />
推荐阅读
- java - Firestore DocumentReference 数据类型无法使用 Gson 库进行序列化/反序列化
- php - 注意:未定义索引:/home/webccans/public_html/index.php 中的 REDIRECT_URL
- clang - 有没有办法禁用特定的 llvm lld 警告?
- python - Python lxml 和 xslt 问题
- python - numba 给出 NumPy 的错误
- ssl - 如何在 Iris GoLang 框架中为通配符子域设置 AutoTLS
- ios - 与一个通知交互后清除所有通知
- c++ - 0x0F50DF58 处未处理的异常:0xC0000005:访问冲突读取位置 0x0047CA04
- wordpress - 机器人访问网站时可以运行 WordPress cron 作业吗?
- mysql - SQL 子查询按列值获取行