所以我试图在输入集中在react时设置className。我为此使用裁判。我也在使用React v16.8.3。
在输入className上,我正在将Focused ref与focused输入进行比较。 我添加了一个测试功能,当我在此功能中对其进行比较时,它的效果很好。但是由于某种原因,我不明白为什么它在className中不起作用。
我希望我正在尝试做的事情很清楚。它很容易解释。
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;
答案 0 :(得分:0)
onFocus
更改状态并使您的组件重新呈现并更改引用。 className
在渲染期间 检查了错误的参考。 test
在渲染后的 中检查正确的参考。
尝试在test
设置之前和return
事件内部调用ref
之前调用onFocus
。
答案 1 :(得分:0)
我知道了。我将函数componend转换为类componend,使其工作如下:
import React, {Component} from 'react';
class EditSocialmedia extends Component {
constructor(props) {
super(props);
this.state = {
facebook: "",
youtube: "",
twitter: "",
focusedElement: React.createRef()
};
}
render () {
const {facebook, youtube, twitter} = this.props.social
return (
<div>
<h2 className="hSmaller hthin">Social Media</h2>
<input id={`facebook`}
className={this.refFacebook === this.state.focusedElement ? "active" : ""}
ref={(input) => this.refFacebook = input}
value={facebook ? facebook : ""}
onChange={() => {this.setState({facebook: this.refFacebook})}}
onFocus={() => this.setState({focusedElement: this.refFacebook})}/>
<input id={`youtube`}
className={this.refYoutube === this.state.focusedElement ? "active" : ""}
ref={(input) => this.refYoutube = input}
value={youtube ? youtube : ""}
onChange={() => {this.setState({youtube: this.refYoutube})}}
onFocus={() => this.setState({focusedElement: this.refYoutube})}/>
<input id={`twitter`}
className={this.refTwitter === this.state.focusedElement ? "active" : ""}
ref={(input) => this.refTwitter = input}
value={twitter ? twitter : ""}
onChange={() => {this.setState({twitter: this.refTwitter})}}
onFocus={() => this.setState({focusedElement: this.refTwitter})}/>
</div>
)
}
}
export default EditSocialmedia;