访问 JSX 元素的类列表 属性
Access ClassList property of JSX Elements
我有以下问题:我想要一个类似 'password status bar' 的类型,告诉用户哪个
密码已经满足并且必须满足的条件,但是当我尝试访问我的标签的类列表时,我收到错误 'Cannot read property add of undefined',当我尝试 console.log 类列表时,我也得到了未定义。我在标签中使用 refs,所以我可以访问属性。我还尝试使用状态变量来实现它,但是当我尝试读出引用时,我总是得到 null。首先,我尝试只在 returns 标签的另一个组件的方法中制作该组件,但每次我也都未定义。
(password和password1是另外一个组件的输入(是重置密码的密码,所以你必须确认新密码)为了测试目的,我设置了pass和pass1应该是password和password1一个简单的字符串))
(我也在使用 react-bootstrap 进行样式设置(如果相关))
我想知道如何访问反应元素的类列表属性,请向我解释我犯了什么错误。
代码:
import React, {useEffect, useState} from 'react';
import {Input, Form, Button} from 'react-bootstrap';
import 'bootstrap/dist/css/bootstrap.min.css';
function PasswordStatus ({password}, {password1}) {
// const [output, setOutput] = useState('');
const names = [`[A-Z]`, `[a-z]`, `[0-9]`, `>10 & <26`, `Special`, `Ident`];
const regexes = [/[A-Z]/g, /[a-z]/g, /[0-9]/g, /^{10, 26}$/, /[ !@#$%^&*()_+\-=\[\]{};':"\|,.<>\/?~]/];
const refNames = [];
const pass='Hello';
const pass1='Hello2';
for(let i=0; i<names.length; i++) {
refNames[i] = React.createRef();
}
useEffect(() => {
// setOutput(names.map((item, index) => {
// return <label className='d-inline' ref={refNames[index]}>{`${item}\u00A0\u00A0`}</label>
// }));
for(let j=0; j<names.length; j++) {
console.log(refNames[j]);
if(pass.match(regexes[j]) ===null || pass1.match(regexes[j])===null) refNames[j].classList.add('text-danger');
else refNames[j].classList.add('text-success');
}
}, []);
// useEffect(() => {
// console.log(refNames);
// console.log(refNames[0]);
// let i = refNames[0];
// console.log(i.classList);
// console.log(output);
// for(let j=0; j<names.length; j++) {
// console.log(refNames[j]);
// if(pass.match(regexes[j]) ===null || pass1.match(regexes[j])===null) refNames[j].classList.add('text-danger');
// else refNames[j].classList.add('text-success');
// }
// }, [output]);
return(
<>
{names.map((item, index) => {
return <label className='d-inline' ref={refNames[index]}>{`${item}\u00A0\u00A0`}</label>
})}
{/* {output} */}
</>
);
}
export default PasswordStatus;
您是在 ObjectRef 上添加 classList 属性,而不是在实际元素上。
RefObject 有当前 属性 此项所在的位置。
for(let j=0; j<names.length; j++) {
if(pass.match(regexes[j]) ===null || pass1.match(regexes[j])===null) refNames[j].current.classList.add('text-danger');
else refNames[j].current.classList.add('text-success');
}
我有以下问题:我想要一个类似 'password status bar' 的类型,告诉用户哪个 密码已经满足并且必须满足的条件,但是当我尝试访问我的标签的类列表时,我收到错误 'Cannot read property add of undefined',当我尝试 console.log 类列表时,我也得到了未定义。我在标签中使用 refs,所以我可以访问属性。我还尝试使用状态变量来实现它,但是当我尝试读出引用时,我总是得到 null。首先,我尝试只在 returns 标签的另一个组件的方法中制作该组件,但每次我也都未定义。
(password和password1是另外一个组件的输入(是重置密码的密码,所以你必须确认新密码)为了测试目的,我设置了pass和pass1应该是password和password1一个简单的字符串))
(我也在使用 react-bootstrap 进行样式设置(如果相关)) 我想知道如何访问反应元素的类列表属性,请向我解释我犯了什么错误。
代码:
import React, {useEffect, useState} from 'react';
import {Input, Form, Button} from 'react-bootstrap';
import 'bootstrap/dist/css/bootstrap.min.css';
function PasswordStatus ({password}, {password1}) {
// const [output, setOutput] = useState('');
const names = [`[A-Z]`, `[a-z]`, `[0-9]`, `>10 & <26`, `Special`, `Ident`];
const regexes = [/[A-Z]/g, /[a-z]/g, /[0-9]/g, /^{10, 26}$/, /[ !@#$%^&*()_+\-=\[\]{};':"\|,.<>\/?~]/];
const refNames = [];
const pass='Hello';
const pass1='Hello2';
for(let i=0; i<names.length; i++) {
refNames[i] = React.createRef();
}
useEffect(() => {
// setOutput(names.map((item, index) => {
// return <label className='d-inline' ref={refNames[index]}>{`${item}\u00A0\u00A0`}</label>
// }));
for(let j=0; j<names.length; j++) {
console.log(refNames[j]);
if(pass.match(regexes[j]) ===null || pass1.match(regexes[j])===null) refNames[j].classList.add('text-danger');
else refNames[j].classList.add('text-success');
}
}, []);
// useEffect(() => {
// console.log(refNames);
// console.log(refNames[0]);
// let i = refNames[0];
// console.log(i.classList);
// console.log(output);
// for(let j=0; j<names.length; j++) {
// console.log(refNames[j]);
// if(pass.match(regexes[j]) ===null || pass1.match(regexes[j])===null) refNames[j].classList.add('text-danger');
// else refNames[j].classList.add('text-success');
// }
// }, [output]);
return(
<>
{names.map((item, index) => {
return <label className='d-inline' ref={refNames[index]}>{`${item}\u00A0\u00A0`}</label>
})}
{/* {output} */}
</>
);
}
export default PasswordStatus;
您是在 ObjectRef 上添加 classList 属性,而不是在实际元素上。 RefObject 有当前 属性 此项所在的位置。
for(let j=0; j<names.length; j++) {
if(pass.match(regexes[j]) ===null || pass1.match(regexes[j])===null) refNames[j].current.classList.add('text-danger');
else refNames[j].current.classList.add('text-success');
}