在 React 组件中使用伪类

Posted

技术标签:

【中文标题】在 React 组件中使用伪类【英文标题】:Using pseudo-classes in React component 【发布时间】:2017-05-07 10:06:27 【问题描述】:

在我的 React 组件中,我有一个包含多个输入字段的表单。在我正在使用的 CSS 类中,有一个“无效”伪类,如果它的值无效,它应该突出显示该字段。目前,输入字段没有在我的组件中定义任何类。他们使用来自 CSS 文件的默认样式。

class MyForm extends Component 

   render() 

      return(

         // There's more code here. Not showing to keep things simple

         <input type="text" name="someProperty" value=myObject.someProperty onChange=e => this.someFunction(e) />

      );
   


我如何实际使用它——意思是,如何将输入字段设置为无效?我尝试简单地将“无效”添加到它的 CSS 类中,但它不起作用。

这是我尝试过的,但没有结果:

<input type="text" name="someProperty" className=showInvalid value=myObject.someProperty onChange=e => this.someFunction(e) />

更新:

对伪类进行更多研究,它们不会进入类。所以在 html 中,输入字段会简单地如下所示:

<input name"someProperty" invalid />

【问题讨论】:

className 应该是一个字符串。我认为它可能认为 className 未定义,因为 showInvalid 未定义。 查看我的更新。看起来它不应该进入 className。 啊,我脑子里放屁的原因……没看到假人。我的坏 看起来你不能在内联样式中使用伪类。这基本上就是你正在做的事情。 ***.com/questions/28269669/…。从来没有出现过 不幸的是,我也得出了这个结论!无赖! 【参考方案1】:

如果我理解正确,那就是你要找的东西

className=`$this.state.showInvalid ? 'invalidCssClassName' : 'nonInvalidCssClassName'`

这意味着您应该将负责评估类名的值存储在某个地方(状态或道具)。在这种情况下,当 showInvalid 被评估为 true 时,CSS 类将是 invalidCssClassName 否则 nonInvalidCssClassName

【讨论】:

查看我的更新。研究表明,类名中没有使用伪类。【参考方案2】:

您可以只在input 元素上使用pattern 属性。

When an element is invalid

元素匹配 :invalid CSS 伪类;这将允许您将特定样式应用于无效元素。同样,有效元素匹配 :valid 伪类....

...所有&lt;input&gt; 元素都可以使用pattern 属性进行验证。此属性需要区分大小写的正则表达式作为其值...

var NumberInput = React.createClass(
  render: function() 
    return <input type="number" pattern="[0-9]+([\,|\.][0-9]+)?" step="0.01" title="This should be a number with up to 2 decimal places." placeholder="Price" />;
  
);

ReactDOM.render(
  <NumberInput />,
  document.getElementById('container')
);
input:invalid 
  background-color: #ff3333;


input:valid 
  background-color: transparent;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="container"></div>

【讨论】:

这是一个有趣的想法!我会试一试,让你知道。谢谢! 当然,没问题。 我不能让它工作,但它应该。我们只是将正则表达式放入模式中,对吗?例如,如果我想确保它是一个带两位小数的数字,我应该能够使用 pattern="/^[0-9]+(\.[0-9][0-9]?)?$ /",对吗? 我使用input 对小提琴进行了更新,将type 设置为number,最多允许两位小数。 对不起,我的第一个模式是错误的,这应该可以[0-9]+([\,|\.][0-9]+)?。查看代码 sn-p。

以上是关于在 React 组件中使用伪类的主要内容,如果未能解决你的问题,请参考以下文章

::before 伪类影响 react-slick 中的箭头

Tailwind CSS:伪类之前

与样式组件一起使用的 Before 和 After 伪类

如何更改从 inputBase 继承的选择组件的 CSS、概述及其伪类

在 React.js 的父组件中使用 react-router 时,如何使用 react context API 将数据从父组件传递到子组件?

如何在 TypeScript 中使用带有 React 无状态功能组件的子组件?