未呈现样式组件的特定目标-反应
我一直在为样式问题而苦苦挣扎,但基本的问题是,我希望在第一个实例之后以不同的方式设置<StyledButton>
的每个实例的样式。为此,我以包装元素(attributeset-row
类名称)和remove-btn
类名称(对于<StyledButton
&>)为目标,如下所示:
const StyledHorizontalAttributesTable = styled(StyledHorizontalAttributes)`
& .attributeset-row:not(:first-child) .remove-btn {
background-color: lightblue;
}
`;
我发现问题在于,由于我的目标是类名称,所以没有将CSS样式应用于组件--正如您在下面看到的那样,我正在将类名称传递给相关组件(它们显示在浏览器中),但同时还有许多其他看起来像行话的东西:
谁能解释一下,在将特定的CSS样式应用到StyledComponent(通常不需要这种类型的样式)方面,我可能出了什么问题,但我需要以不同的方式设置第一个之后的所有StyledButton>
的样式。
以下是我的代码:
const StyledButton = styled(Button)`
margin-top: 14px;
`;
const StyledHorizontalAttributesTable = styled(StyledHorizontalAttributes)`
& .attributeset-row:not(:first-child) .remove-btn {
background-color: lightblue;
}
`;
return (
<div className={className}>
{objects.map((enteredObject, index) => (
<RepeatableAttributeSetContextProvider
form={form}
object={enteredObject}
key={`${enteredObject.key}-${enteredObject.repeatIndex}`}
>
<StyledHorizontalAttributesTable className="attributeset-row">
{enteredObject.attributeCollection.questions
.filter(filterRepeatAttributes)
.map((attribute) => (
<Fragment key={attribute.key}>
{renderAttribute(enteredObject, attribute, formLayout)}
</Fragment>
))}
<StyledButton
className="remove-btn"
type="link"
buttonStyle="LINK"
name="delete"
dataId={`delete-${enteredObject.key}-${index}`}
isOberonIcon
isIconButton
icon="bin"
onClick={() => onRemove(enteredObject)}
>
<Message id="Form.Button.Remove" defaultMessage="Remove" />
</StyledButton>
</StyledHorizontalAttributesTable>
</RepeatableAttributeSetContextProvider>
))}
</div>
);
解决方案
我会使用相邻的同级组合符。这将以除第一个之外的所有.attributeset-row
为目标。
const StyledHorizontalAttributesTable = styled(StyledHorizontalAttributes)`
& + & {
.remove-btn {
background-color: lightblue;
}
}
`;
在CodeSandbox上有这个例子的一个简单版本。https://codesandbox.io/s/serene-swanson-frcb4?file=/src/App.js
相关文章