next.js 在Map子组件数组时使用样式化组件自定义属性

mi7gmzs6  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(148)

我正在做一个Next.js项目,它使用了样式化组件。我有一个数据数组,我Map到呈现子组件。我的子组件需要一个isActive prop,我从父组件传递它。当传递isActive时,所有样式化组件返回所有子组件的活动状态,而不是仅返回活动组件。
我的父组件如下所示。我已经硬编码了第一个要激活的项目作为测试。我已经用调试器验证了只有第一项将isActive设置为true

{reviews.map((review, index) => (
  <ReviewItem
    key={review.name}
    review={review}
    isActive={index === 0}
  />
))}

我的子组件看起来像这样:

<ReviewItemContainer $isActive={isActive}>
  ...
</ReviewItemContainer>

样式化的组件如下所示。background-color只是一个测试属性:

export const ReviewItemContainer = styled.div<{ $isActive: boolean }>`
  ${$isActive => ($isActive ? 'background-color: black;' : '')}
`;

我希望只有设置为isActive的项应该获得黑色背景色。但是,我的所有子组件都是这样,即使是带有isActive === false的子组件也是如此。
谢谢你能提供的任何帮助。这是我第一次在任何真实的的能力中使用样式化组件,所以我可能只是错过了一些东西。

vx6bjr1n

vx6bjr1n1#

你没有调用你传递的prop,而是使用了完整的props对象来完成背景颜色条件。当前使用的$isActive实际上是这个对象{ $isActive: true || false, },因此条件将始终为true,背景将始终默认为黑色,为了实际调用正在传递的$isActive prop,您必须在样式化组件中更改调用,使其看起来像这样

// Destructure the props object
${({ $isActive }) => ($isActive ? 'background-color: black;' : '')}

或不破坏

${(props) => (props.$isActive ? 'background-color: black;' : '')}

相关问题