reactjs - 将 props 传递/绑定到以对象形式获得的 React 组件
问题描述
我有以下对象:
const iconsMap = {
eye: <FaEye />,
database: <FaDatabase />,
reactjs: <FaReact />,
linkedin: <AiFillLinkedin />,
facebook: <AiFillFacebook />,
instagram: <AiFillInstagram />,
reddit: <AiFillRedditCircle />,
email: <AiOutlineMail />,
};
我想创建一个带有两个参数的函数:key
并且props
基于键,它通过传播props
从函数中获取的值来返回上述道具:
像这样的东西:
export const getIcon = (iconName, props) => (<iconsMap[iconName] {...props }/>)
我发现的一种可能方法是:
export const getIcon = (iconName, props) => {
switch (iconName) {
case iconsMap.eye:
return <FaEye {...props} />;
case iconsMap.database:
return <FaDatabase {...props} />;
case iconsMap.reactjs:
return <FaReact {...props} />;
case iconsMap.linkedin:
return <AiFillLinkedin {...props} />;
case iconsMap.facebook:
return <AiFillFacebook {...props} />;
case iconsMap.instagram:
return <AiFillInstagram {...props} />;
case iconsMap.reddit:
return <AiFillRedditCircle {...props} />;
case iconsMap.email:
return <AiOutlineMail {...props} />;
default:
return null;
}
};
虽然我正在寻找一种更直观的方式。
解决方案
映射函数而不是映射 React 节点:
const iconsMap = {
eye: FaEye,
database: FaDatabase,
...
};
然后用你的道具调用它:
export const getIcon = (iconName, props) => {
// Should be capitalized
const Component = iconsMap[iconName];
return <Component {...props}/>
};
推荐阅读
- amazon-web-services - 尝试在 AWS Elastic Beanstalk 上部署 Flask 应用程序,出现错误“ModuleNotFoundError: No module named 'botocore'”
- sql-server - Having trouble calling a stored procedure in SQL Server from Python pyodbc
- javascript - 使用 OpenWeather 图标作为传单地图上的标记
- node.js - Puppeteer NodeJS没有截图整个页面
- javascript - 如何在不先“激活”的情况下在 Visual Studio Code 中使用下划线?
- php - 如何在 iframe 中阻止 referrerpolicy="no-referrer"
- java - java/kotlin 中 readBigUInt64BE 的等价物是什么?
- react-native - Algolia + React Native InstantSearch (SortBy)
- go - 使用 helm 模板文件有条件地设置整个模板文件中使用的变量
- python - 从 S3 读取 Json 并使用 python 选择文件