파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.
컴포넌트의 많은 루틴을 순수 함수로서 작성하기를 요구
컴포넌트의 상탯값은 불변 객체 (Immutable Object)로 관리해야만 합니다.
이를 통해 UI개발의 복잡도를 낮추고, 버그 발생 확률도 줄입니다.
// jsx
const Header = (props) => (
<div>
<h1>{props.title}</h1>
</div>
)
하나 이상의 인자를 받고, 인자를 변경하지 않고, 참조하여 새로운 값을 반환한다.
Side Effects가 없도록 구성
let tom = {
name: "Tom",
canRun: false
};
function not_pure_fn() { // 순수함수가 아님 (외부의 변수를 바꾸기 때문에)
tom.canRun = true;
}
function pure_fn1(person) { // 순수함수 (새로운 객체를 만들어서 반환한다)
return {
...person,
canRun: true
};
}
const pure_fn2 = (person) => ({ // 순수 함수
...person,
canRun: true
});
reduce, filter, map, join 등
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const number = numbers.reduce((acc, n) => acc + n, 0);
console.log(number); // 5
const even_numbers = numbers.filter(i => i % 2 == 0);
console.log(even_numbers); // [ 2, 4, 6, 8, 10 ]
from functools import reduce
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
number = reduce(lambda acc, n: acc + n, numbers, 0)
print(number)
even_numbers = filter(lambda i: i % 2 == 0, numbers)
print(tuple(even_numbers))
일부의 인자를 고정한 새로운 함수를 반환하는 함수를 만드는 기법
// JavaScript #1
function userLogs(username) {
function wrap(message) {
console.log(`${username} - ${message}`);
return wrap;
}
// JavaScript #2
const userLogs = username => message => {
console.log(`${username} - ${message}`);
};
const log = userLogs('Chinseok Lee');
log('Hello World');
# Python
def userLogs(username):
def wrap(message):
print(f"{username} - {message}")
return wrap
log = userLogs('Chinseok Lee')
log('Hello World')