React 에서 ref 의 두 데모 예제 학습
왜 구성 요소 에서 Dom 을 직접 가 져 올 수 없 습 니까?
구성 요 소 는 실제 DOM 노드 가 아니 라 메모리 에 존재 하 는 데이터 구조 로 가상 DOM(virtual DOM)이 라 고 합 니 다.문서 가 삽입 되 어야 만 실제 DOM 이 됩 니 다.
구성 요소 에서 실제 DOM 노드 를 가 져 오 려 면 공식 적 으로 제공 하 는 ref 속성 을 사용 해 야 합 니 다.
필드 사용
사용자 가 페이지 를 불 러 오 면 기본적으로 input 상자 에 초점 을 맞 춥 니 다.
import React, { Component } from 'react';
import './App.css';
// React demo
class App extends Component {
constructor(props) {
super(props)
this.state = {
showTxt: ""
}
this.inputRef = React.createRef();
}
// input
componentDidMount(){
this.inputRef.current.addEventListener("keydown", (event)=>{
this.setState({showTxt: event.key})
})
// input
this.inputRef.current.focus()
}
render() {
return (
<div className="app">
<input ref={this.inputRef}/>
<p> : <span>{this.state.showTxt}</span></p>
</div>
);
}
}
export default App;
자동 초점 input 애니메이션 데모필드 사용
사용자 가 입력 한 은행 카드 번 호 를 더욱 잘 보 여주 기 위해 서 는 네 개의 숫자 마다 빈 칸 을 추가 해 야 한다.
실현 방향:
사용자 가 입력 한 문자 갯 수 를 5 로 나 눌 수 있 을 때 빈 칸 을 추가 합 니 다.
사용자 가 숫자 를 삭제 할 때 빈 칸 을 만 났 을 때 두 글자(하나의 빈 칸,하나의 숫자)를 제거 해 야 합 니 다.
이상 의 생각 을 실현 하기 위해 서 는 키보드 의 BackSpace 이 벤트 를 가 져 와 삭 제 된 논 리 를 다시 써 야 합 니 다.
숫자 로 제한 하고 네 자리 간격 으로 빈 칸 을 추가 합 니 다.
import React, { Component } from 'react';
import './App.css';
// React demo
class App extends Component {
constructor(props) {
super(props)
this.state = {
showTxt: ""
}
this.inputRef = React.createRef();
this.changeShowTxt = this.changeShowTxt.bind(this);
}
// input
componentDidMount(){
this.inputRef.current.addEventListener("keydown", (event)=>{
this.changeShowTxt(event);
});
// input
this.inputRef.current.focus()
}
//
changeShowTxt(event){
//
if (event.key === "Backspace") {
// ,
if (this.state.showTxt.endsWith(" ")){
this.setState({showTxt: this.state.showTxt.substring(0, this.state.showTxt.length-2)})
//
}else{
this.setState({showTxt: this.state.showTxt.substring(0, this.state.showTxt.length-1)})
}
}
//
if (["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(event.key)){
// 0,
if((this.state.showTxt.length+1)%5 === 0){
this.setState({showTxt: this.state.showTxt+' '})
}
this.setState({showTxt: this.state.showTxt+event.key})
}
}
render() {
return (
<div className="app">
<p> demo</p>
<input ref={this.inputRef} value={this.state.showTxt}/>
</div>
);
}
}
export default App;
소결:가상 돔 은 웹 페이지 의 성능 을 향상 시 킬 수 있 지만 가상 DOM 은 사용자 의 입력 을 받 을 수 없다.텍스트 입력 상자 의 일부 동작 을 가 져 오기 위해 서 는 js 원생 이벤트 바 인 딩 메커니즘 이 가장 좋 습 니 다~
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바삭바삭하고 간단한 결제 페이지 만들기먼저 Next.js에서 프로젝트를 만듭니다. Vercel & Next.js가 매우 편하기 때문에 최근에는이 구성을 사용하고 있습니다. 그런 다음 Tailwind CSS를 넣습니다. Tailwind CSS를 사용하면 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.