javascript - 是否可以从库中定位样式化组件的子组件?
问题描述
我正在使用<Form/>
组件库中的组件。该表单有一个提交按钮的子组件。
const loginForm = [
{
label: "Username",
required: true,
type: "text"
},
{
label: "Password",
required: true,
type: "password"
}
]
<LoginForm
width={{ xs: 12, md: 4 }}
autoComplete={false}
buttonDisabled={buttonDisabled}
buttonLabel="LOGIN"
fields={loginForm}
onChange={this.onChange}
onSubmit={data => login({ variables: data })}
/>
生成这个html:
我想定位按钮来设置它的样式。希望做这样的事情:
const LoginForm = styled(Form)`
Button_StyledButton{
outline: black solid 10px;
}
`
本质上是针对表单,然后是子按钮组件。
这可以用样式化的组件来完成吗?
解决方案
由于它不是您使用的公共图书馆,请确保您的图书馆有利于您传递className
道具。
该
styled
方法也适用于您自己的所有组件或任何第三方组件,只要它们将className
prop 传递给它们渲染的子组件,它们也应该传递它,依此类推。最终,className
必须将该行向下传递到实际的 DOM 节点,以使样式生效。
如果满足此条件,您可以利用该styled(LoginForm)
方法。
我不知道您生成的 DOM 结构LoginForm
,但您可以通过普通的 css 选择器有效地定位按钮。
假设 DOM 结构是这样的:
<form>
<label>...</label>
<input .../>
<label>...</label>
<input .../>
<button>...</button>
</form>
styled
然后你可以在 styled-components 的方法中定位这个按钮,如下所示:
const LoginForm = styled(Form)`
button {
outline: black solid 10px;
}
`
选择器实际上取决于 DOM 结构,您需要根据需要对其进行调整。
如果className
prop 没有传递到您正在使用的库中的组件树中,则需要提供一个包装器组件:
const Wrapper = styled.div`
button {
outline: black solid 10px;
}
`
<Wrapper>
<LoginForm
width={{ xs: 12, md: 4 }}
autoComplete={false}
buttonDisabled={buttonDisabled}
buttonLabel="LOGIN"
fields={loginForm}
onChange={this.onChange}
onSubmit={data => login({ variables: data })}
/>
</Wrapper>
CodeSandbox 示例:https ://codesandbox.io/s/2w3owyjy2n
推荐阅读
- angular - 在 Angular 模板表单中获取自定义验证时出现问题
- css - CSS:在浏览器调整大小时保持一致的段落高度
- xml - PowerShell 获取所有相关值
- wpf - DataTrigger 在 Style 中没有绑定
- python-3.x - 在使用 python 将带有粗体行的表提取到 pandas 数据框时需要帮助
- salt-stack - 在 Oracle Linux 上使用 Salt inotify Beacon
- ios - 访问firestore时,数据总是空的
- r - 如何使用 plot_model() 向 glm 可视化添加第二个阴影置信区间(即 95% 和 85% CI)?
- cadence-workflow - 有节奏地恢复工作流程
- outlook-redemption - 如何使用具有 HTML 正文的 Redemption C# 创建 Outlook .msg 文件?