0

我有一个下面的 Div,它由一个输入框组成

  return (
  <div class="textBoxContainer input-container">
      <div class="field textContainer">
        <input id={props.id} type={type} placeholder=' ' onChange={handleChange}
        onBlur={createValidator(type)} 
        className={textContainerClassDisabled.join(' ')} disabled={props.textContainerDisabled} />
        <label for={props.id}>{placeholder}</label>
        <span className={boxClass.join(' ')} onClick={showHide}>
          {type === 'input' ? 'Hide' : 'Show'}
        </span>
         <p>{isValid}</p> 
      </div>
  </div>
   )

我想将 'error' 类添加到 'div class="textBoxContainer input-container">'

.error {
    border:2px solid red;
}

下面是条件语句:

switch (type) {
    case 'email':
        return (e) => {
           email=e.target.value;
           //var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
           if(!emailReg.test(email)) {
            isValid=true;
            console.log("Please enter a valid email address");
           }
           else{
            isValid=false;
            console.log("Correct");
           }
         }

在哪里:

 let isValid=false;
 type=email;

当 isValid 条件为真时,我无法动态更改文本框边框的颜色。

4

5 回答 5

0

如果您不想导入classnames库,则可以使用字符串模板和三元组来实现相同的目的:

<div className={`textBoxContainer input-container ${isValid? 'valid_class' : 'invalid_class'}`}>
      ...
</div>

旁注:当电子邮件无效时,您将 isValid 设置为 true 让我感到困惑。我会考虑切换它,以便更容易阅读。

于 2019-09-26T13:48:57.833 回答
0

你可以这样做,className = 'textBoxContainer input-container'

<div class="className">

和开关部分,

if(!emailReg.test(email)) {
        isValid=true;
        className += ' error';
        console.log("Please enter a valid email address");
       }
       else{
        isValid=false;
        className = 'textBoxContainer input-container';
        console.log("Correct");
       }
于 2019-09-26T13:47:12.753 回答
0

您可以从“类名”导入类名 import classNames from 'classnames';

<div class="textBoxContainer input-container">
      <div class="field textContainer">
        <input id={props.id} type={type} placeholder=' ' onChange={handleChange}
        onBlur={createValidator(type)} 
        className={textContainerClassDisabled.join(' ')} disabled={props.textContainerDisabled} />
        <label for={props.id}>{placeholder}</label>
        <span className={classNames({type==="input" ? "your class":"else other class"})
onClick={showHide}>

         <p>{isValid}</p> 
      </div>
  </div>
于 2019-09-26T13:34:08.143 回答
0

您可以isValid作为道具传递给您的组件,然后根据值有条件地将.error类添加到className={textContainerClassDisabled.join(' ')}isValid

于 2019-09-26T13:28:46.870 回答
0

谢谢大家,我可以整理一下了。

const [isValid, setIsValid]=useState(true);

const wrongInput=(a)=>{
    setIsValid(a);
};

if(!emailReg.test(email)) {
    wrongInput(false);
    console.log("Please enter a valid email address");
}
else{
    wrongInput(true);
    console.log("Correct");
}

<div className={`textBoxContainer input-container ${isValid? '' : 'error'}`}>
于 2019-09-26T19:51:28.223 回答