리액트는 컴포넌트나 루틴을 순수 함수로서 작성하기를 요구한다.
1. 상태값/속성값(부모로 부터 주입받는)이 같으면 항상 같은 값을 반환해야한다.
2. 다른 side effects
를 발생시키지 않는다.
컴포넌트의 상태값은 불변객체 (Immutable Object)로 관리한다.
1. 수정할 때에는 기존값을 변경하는 것이 아니라, 가은 이름의 새로운 객체를 생성한다.
// 순수함수의 예제로 짜여진 jsx
const Header = (props) => (
<div>
<h1>{props.title}</h1>
</div>
)
순수 함수를 활용한 데이터 변환
reduce, filter, map, join
// javascript
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const number = numbers.reduce((acc, n) => acc + n, 0);
const even_numbers = numbers.filter(i => i % 2 == 0);
# python
from functools import reduce
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
number = reduce(lambda acc, n: acc + n, numbers, 0)
even_numbers = filter(lambda i: i % 2 == 0, numbers)
일부의 인자를 고정한 새로운 함수를 반환하는 함수를 만드는 기법
function userLogs(username) {
function wrap(message) {
console.log(`${username} - ${messages}`);
}
return wrap
}
const log = userLogs("USER 001");
log("Hello World");
const userLogs = username => message => {
console.log(`${username} - ${messages}`);
};
# python 의 경우
def userLogs(username):
def wrap(message):
print(f"{username} - {message}")
return wrap