javascript - 向 JSX Element 变量添加额外的道具
问题描述
如何向作为道具传递的 JSX.Element 变量添加其他道具?
首先我像这样创建变量
const leftIcon = <SmallIcon icon="note" color={colors.red} />
然后它被传递给我的函数组件并像
const ScreenHeader: React.FunctionComponent<ScreenHeaderProps> = ({
leftIcon = <></>,
}) => {
return (
<View>
<Header
leftComponent={leftIcon}
/>
</View>
)};
如何在“leftIcon”变量中添加额外的样式道具,然后再将其用于 Header?
解决方案
如果您以React
现在的方式使用组件初始化变量(const leftIcon = <SmallIcon />
),那么您将无法向props
其中传递附加值。
这是一个可能的解决方案:
// make `LeftIcon` into a function so that you
// can use it in the following way: `<LeftIcon />`
const LeftIcon = (props) => (
<div className="LeftIcon" onClick={() => {}} {...props}>
<p>I am a left icon!</p>
<p>Additional props: {JSON.stringify(props)}</p>
</div>
);
const ScreenHeader = ({ leftComponent = null }) => {
const CustomLeftComponent = leftComponent ? leftComponent : null;
const greenComponent = CustomLeftComponent
? <CustomLeftComponent style={{ color: "green" }} />
: null;
return (
<div>
<p>I am a screen header!</p>
{greenComponent}
</div>
);
};
function App() {
return (
<div className="App">
<ScreenHeader leftComponent={LeftIcon} />
<hr />
<ScreenHeader />
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById("app")
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"></div>
或者,您可以在内部使用之前将附加信息传递props
给组件:LeftIcon
ScreenHeader
// make `LeftIcon` into a function so that you
// can use it in the following way: `<LeftIcon />`
const LeftIcon = (props) => (
<div className="LeftIcon" onClick={() => {}} {...props}>
<p>I am a left icon!</p>
<p>Additional props: {JSON.stringify(props)}</p>
</div>
);
const ScreenHeader = ({ leftComponent = null }) => {
return (
<div>
<p>I am a screen header!</p>
{leftComponent}
</div>
);
};
function App() {
return (
<div className="App">
<ScreenHeader leftComponent={<LeftIcon style={{ color: "green" }} />} />
<hr />
<ScreenHeader />
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById("app")
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"></div>
推荐阅读
- printers - 在打印管理中对打印机进行批量/批量更改
- typo3 - 有人对 TYPO3 v10 中的容器内容元素、DCE 和前端编辑有经验吗?
- ios - 如何使 UIButton 在其父视图的框架外可点击
- c - 程序不在指定端口上发送 UDP 包
- reactjs - 为什么计数没有在浏览器上呈现?
- .net - 我如何使用 Poly 重试库。Net 框架和数据库上下文
- java - 查询在工作台中工作,但不在休眠中
- powerbi - 查找每日斜率或前一周减去当前周差
- php - 创建新路线时出现404错误,Laravel
- spartacus-storefront - 将 LoginComponent 移动到另一个插槽