javascript - Styled-Components 的 .attrs() 函数的用例是什么?
问题描述
.attrs()
我在样式化组件中遇到了该功能,但我不明白它的作用,或者它的不同之处?
attrs()
我试图理解他们文档中的示例,但就我而言,我可以在没有该功能的情况下做完全相同的事情。
有人可以向我解释一下或举一个简单的例子吗?
解决方案
专注于命名非常重要。
顾名思义,样式化组件用于设置原生 DOM 元素或自定义组件的样式。
attrs
用于在构造函数中提及同一个 DOM 元素的属性,attrs
而无需在实际组件调用中提及它。
上面这行的意思是你可以做
<Input placeholder="A small text input" />
和
const Input = styled.input.attrs(({ type }) => ({
type: type || "password"
}))`
align-items: center;
display: flex;
margin: 1.5vh 0;
`
看到组件用法在任何地方<Input .../>
都没有type
道具。它来自您的属性构造函数(静态)
你不可能在你的样式规则中这样做,因为这些只是你的CSS
属性的字符串文字。
它使您免于type='password'
在每次使用
<Input type='password' ... />
奖金:
现在,这是一个具有密码属性的特定input
组件。type
如果您希望拥有一个具有任何属性input
值的通用(样式化组件)怎么办?type
多田!
const Input = styled.input.attrs(({ type }) => ({
type: type || "password",
...
您type
现在是动态的,即它将采用您从组件的使用中指定的任何输入type
道具,并将输入呈现为该类型(文本、密码、文件等),或者如果您跳过类型道具,它将选择默认的password
. 您可以在那里使用尽可能多的条件逻辑。
例子:
<Input .../> // renders type="password"
<Input type="text" .../>
<Input type="email" .../>
希望这能回答你的问题。
推荐阅读
- android - 谷歌翻译链接无法从 android webview 始终如一地工作
- javascript - JSON.stringify 返回空对象
- javascript - setState 被调用两次,但父函数只被调用一次
- c++ - 如何在没有 root 权限的情况下更改 Linux 系统时间?
- python - python ma-in-the-middle scapy 和 netfilterqueue
- ms-access - 子窗体中的“DoCmd.GoToRecord”作用于窗体和子窗体
- java - 使用JSoup将android中的href值更改为本地值
- bash - 从更大的列表中创建 4 个元素的所有组合
- android - 为什么某些应用程序风格中没有出现无崩溃统计信息?
- javascript - 当计算本身返回一个数字时,为什么我的得分获取器评估为 NaN?