Today I Learned ... react.js
🙋♂️ React.js Lecture
🙋 My Dev Blog
ref
를 설정해줄 때, 우리는 콜백에 전달해주는 식으로 해줬다.예>
// JSX
return(
<input ref={this.onInputRef} />
)
class Test extends Component {
...
onFormSubmit = (e) => {
// 내용
this.inputRef.focus()
}
inputRef;
onInputRef = (el) => {this.inputRef = el};
}
onInputRef
를 전달해서 인수로 받은 el을 this.inputRef에 할당한다.+) 참고 - Hook에서는 useRef
를 이용한다.
// inputRef 선언
let inputRef = useRef(null);
// JSX
return (
<input ref={inputRef} />
);
// 사용시 - current 붙여줘야함.
inputRef.current.focus();
React.createRef()
이용// inputRef 선언 (클래스 몸체 내)
inputRef = createRef();
// JSX
return (
<input ref={this.inputRef} />
);
// 사용시 - ❗️ current 붙여줘야함
this.inputRef.current.focus()
💬 참고
함수를 리턴하는 함수 (함수 안에 함수를 넣음) = 커링
setState()도 함수형으로 작성하면, '함수'이다보니
그 안에 다른 동작을 추가로 넣을수도 있다.
이를하이어오더 컴포넌트
라고 한다.
-> 원래 this.setState()가 실행되면 render()가 실행된다.
-> render()안에 setState()가 또 실행되고 다시 render()
-> 무한 반복.
예> Try.jsx
import React, { memo } from "react";
const Try = memo(({ tryInfo, index }) => {
tryInfo.try = 'hello'; // ❌ 변경 불가
return (
<li key={`${index}차 시도:`}>
{tryInfo.try} : {tryInfo.result}
</li>
);
});
export default Try;
props
는 부모가 바꿔야함. 자식이 직접 바꿔선 Xstate
로 넣어준다.import React, { memo, useState } from "react";
const Try = memo(({ tryInfo, index }) => {
const [result, setResult] = useState(tryInfo.result);
const onClick = () => {
setResult('hello');
}
return (
<li key={`${index}차 시도:`}>
{tryInfo.try} : <span onClick={onClick}> {result} </span>
</li>
);
});
export default Try;
+) 클래스 컴포넌트에서도 마찬가지로.
class Try extends PureComponent {
state = {
result: this.props.tryInfo.result,
};
render() {
const {tryInfo} = this.props;
return (
<li>
{tryInfo.try} : <span>{this.state.result}</span>
</li>
)
}
++) constructor이 쓰이는 클래스 컴포넌트는
class Try extends PureComponent {
constructor(props) {
super(props);
// 다른 동작 추가 가능
const filtered = this.props.filter(() => {})
this.state = {
result: filtered, // 여기 넣어줄수 있음
};
}
render() {
const {tryInfo} = this.props;
return (
<li>
{tryInfo.try} : <span>{this.state.result}</span>
</li>
)
}
컴포넌트 A에서 F까지 A의 props를 전달하려 할때,
A->B->C->D->E->F 로 구성되어있다면
B~E까지 props가 쓸데없이 전달된다.
-> props가 전달되면? 렌더링이 될 위험성 O.
-> A에서 F로 바로 props를 전달 할 수 있는 방법인
context
를 이용하자.
참고 :
context
를 이용한 것이Redux
이다!