所以我尝试在React中聚焦输入时设置一个className。我用的是裁判。我也在使用React v16.8.3。
在输入className处,我正在比较聚焦的ref和聚焦的输入。我添加了一个测试函数,当我在这个函数中比较它时,它工作得很好。但由于某些原因,我不明白为什么它在className if/else中不起作用。
我希望这是有点清楚我试图做什么。
import React, {useState} from 'react';
function EditSocialmedia (props) {
const [facebook, setFacebook] = useState(props.social.youtube);
const [youtube, setYoutube] = useState(props.social.youtube);
const [twitter, setTwitter] = useState(props.social.twitter);
const [focusedElement, setFocusedElement] = useState(React.createRef());
let refFacebook = React.createRef();
let refYoutube = React.createRef();
let refTwitter = React.createRef();
function test () {
console.log(focusedElement)
console.log(refFacebook === focusedElement)
console.log(refYoutube === focusedElement)
console.log(refTwitter === focusedElement)
}
return (
<div>
<h2 className="hSmaller hthin">Social Media</h2>
<input id={`facebook`}
className={refFacebook === focusedElement ? "active" : ""}
ref={(input) => refFacebook = input}
value={facebook ? facebook : ""}
onChange={() => {setFacebook(refFacebook.value)}}
onFocus={() => setFocusedElement(refFacebook)}/>
<input id={`youtube`}
className={focusedElement === refYoutube ? "active" : ""}
ref={(input) => refYoutube = input}
value={youtube ? youtube : ""}
onChange={() => {setYoutube(refYoutube.value)}}
onFocus={() => setFocusedElement(refYoutube)}/>
<input id={`twitter`}
className={focusedElement === refTwitter ? "active" : ""}
ref={(input) => refTwitter = input}
value={twitter ? twitter : ""}
onChange={() => {setTwitter(refTwitter.value)}}
onFocus={() => setFocusedElement(refTwitter)}/>
<div onClick={test}>Test</div>
</div>
)
}
export default EditSocialmedia;
2条答案
按热度按时间nafvub8i1#
我把它修好了。我把函数组件转换成了一个类组件,让它像这样工作:
fnvucqvd2#
onFocus
更改状态,并导致组件重新渲染和更改引用。className
在渲染期间检查错误的引用。test
在渲染后检查正确的引用。尝试在
return
之前、ref
设置内部和onFocus
事件内部调用test
。