【发布时间】:2021-08-09 08:04:57
【问题描述】:
考虑我有以下组件
// variant can be one of [facebook, google, apple, ...etc]
<CompanyLogo variant="facebook"/>
variant 的可能值的数量是有限的。
我想根据variant prop的值动态加载对应的图片。
现在,我想到了两种方法。
方案一:使用 GraphQL 查询所有公司 logo 图片并使用 JS 找到我需要的。
const { images: { edges: images } } = useStaticQuery(graphql`
query {
images: allFile(filter: {
sourceInstanceName: {eq: "images"},
relativeDirectory: {eq: "companies"}
}) {
edges {
node {
name
childImageSharp {
gatsbyImageData
}
}
}
}
}
`);
const image = images.find(({ node: { name } }) => variant === name );
我担心的是我不确定这是否会极大地影响性能,尤其是在有很多公司徽标的情况下。
选项2:使用switch或if条件加载图片
switch (variant) {
case 'facebook':
return <StaticImage src="facebook.png" />
case 'apple':
return <StaticImage src="apple.png" />
// ...etc
}
问题是代码真的很臭。
您有更好的方法来实现这一目标吗?
【问题讨论】:
标签: reactjs gatsby gatsby-image gatsby-plugin