순수함수는 사이드 이펙트 없이 인풋에 대하여 동일한 아웃풋을 뱉는 함수를 의미합니다.
외부 변수를 참조하거나, 변경하는 사이드 이펙트가 없기 때문에 결과를 예측할 수 있다는 특징을 가지기 때문에 순수함수를 제작하기 위해서는 데이터의 불변성을 유지하는 것이 중요합니다.
+) 함수의 전달인자로 참조 자료형이 전달되는 경우, 의도치 않게 해당 객체 자체를 바꾸는 사이드 이펙트를 만들수도 있고, 이는 해당 데이터의 불변성을 손상시키기 때문에 배열의 불변성을 보장하는 메서드인 map, filter, reduce등을 사용합니다.
(출처 : [JS] 순수함수, side effect )
컴포넌트의 상태를 나타내며 변할 수 있는 값을 의미합니다. 컴포넌트 내부에서 선언되기 때문에, 컴포넌트 외부에는 공개되지 않는 값이며, 컴포넌트 스스로가 관리하기 때문에 state값을 변경할 수 있습니다.
React에서 상위 컴포넌트가 하위 컴포넌트에 정보를 전달할 때 사용하며, 상위 컴포넌트에서 props를 상속받는 컴포넌트 내에서는 수정이 불가능하다는 것이 특징입니다. 컴포넌트는 props로 객체, 배열 함수를 포함한 모든 JavaScript 값을 전달할 수 있습니다.
두 객체 모두 렌더링 결과물에 영향을 줄 정보를 갖고 있지만, 그 정보를 직접 관리하는지, 컴포넌트에 전달하는지의 방식에서 차이가 있습니다.
( 출처 : React.state ,props 하는일과 차이점, 리액트 공식문서 번역-state,리액트 공식문서 번역-props )