이번 포스팅은 JavaScript에서 객체의 프로퍼티를 동적으로 추가하는 방법을 소개합니다.
Computed Property Names
계산된 프로퍼티 이름(Computed Property Names)은 자바스크립트 객체 프로퍼티 이름을 동적으로 설정할 수 있도록 해주는 ES6의 기능입니다.
유효한 값을 반환하는 변수 또는 함수를 대괄호 안에 작성하여 객체의 프로퍼티를 동적으로 추가할 수 있습니다.
다음 예제는 age라는 변수를 정의 및 선언하고 객체의 대괄호에 설정합니다.
const age = 'age';
const personObject = {
name: 'Bob',
[age]: 30
}
console.log(personObject);
console.log(personObject.age);
console.log(personObject[age]);
실행 결과
{name: 'Bob', age: 30}
30
30
복잡한 표현식
대괄호에는 변수와 문자열을 조합하여 객체의 프로퍼티를 동적으로 추가할 수 있습니다.
다음 예제는 문자열과 변수를 조합하여 객체의 프로퍼티를 추가합니다.
const strValue = 'g';
const personObject = {
name: 'Bob',
['a' + strValue + 'e']: 30
}
console.log(personObject);
console.log(personObject.age);
console.log(personObject[age]);
실행 결과
{name: 'Bob', age: 30}
30
30
함수 전달
대괄호에는 변수뿐만 아니라 함수도 설정할 수 있습니다.
다음 예제는 대괄호에 함수를 설정하여 객체의 프로퍼티를 추가합니다.
function getStringName() {
return 'ag'
}
const personObject = {
name: 'Bob',
[getStringName() + 'e']: 30
}
console.log(personObject);
console.log(personObject.age);
console.log(personObject[age]);
실행 결과
{name: 'Bob', age: 30}
30
30
React 예제
Computed Property Names는 리액트에서 유용하게 사용할 수 있습니다. input 태그 또는 특정 컴포넌트를 많이 사용하고 onChange 이벤트에서 값을 변경해야 하는 경우 한 개의 함수로 처리할 수 있습니다.
리팩토링 전
render() {
return (
<div>
<input type='text'
value={this.state.firstName}
onChange={(e) => {
this.setState({firstName: e.target.value});
}}
/>
<br />
<input type='text'
value={this.state.lastName}
onChange={(e) => {
this.setState({lastName: e.target.value});
}}
/>
<br />
<input type='text'
value={this.state.age}
onChange={(e) => {
this.setState({age: e.target.value});
}}
/>
<br />
<input type='text'
value={this.state.address}
onChange={(e) => {
this.setState({address: e.target.value});
}}
/>
</div>
);
}
리팩토링 후
handleChange = (e) => {
const name = e.target.name;
this.setState({[name]: e.target.value});
}
render() {
return (
<div>
<input type='text'
name='firstName'
value={this.state.firstName}
onChange={this.handleChange}
/>
<br />
<input type='text'
name='lastName'
value={this.state.lastName}
onChange={this.handleChange}
/>
<br />
<input type='text'
name='age'
value={this.state.age}
onChange={this.handleChange}
/>
<br />
<input type='text'
name='address'
value={this.state.address}
onChange={this.handleChange}
/>
</div>
);
}
반응형
'JavaScript > 객체' 카테고리의 다른 글
[JavaScript]객체 구조 분해(Object Destructuring) (0) | 2022.09.22 |
---|---|
[JavaScript]유사 배열 객체(Array-like Objects) (0) | 2022.06.29 |
[JavaScript]Map 객체 정렬하는 방법 (0) | 2022.01.03 |
[JavaScript]프로토타입(Prototype)이란? (0) | 2021.12.27 |
[JavaScript]Date 객체 유효성 체크 (0) | 2021.12.23 |
댓글