# 순수함수로 어떻게 만들까? ```jsx= const ImageInput = ({ uploadImages, setUploadImages }) => { const hiddenFileInput = React.useRef(null); const onImageInputButtonClicked = () => { hiddenFileInput.current.click(); }; const onFileInputChanged = (event) => { const fileUploaded = event.target.files[0]; const fileReader = new window.FileReader(); fileReader.onloadend = (onLoadEndEvent) => { const imageUrl = onLoadEndEvent.target.result; const newFileObj = { fileUploaded, imageUrl }; setUploadImages([...uploadImages, newFileObj]); }; fileReader.readAsDataURL(fileUploaded); }; //... return ( <input type="file" accept="image/*" ref={hiddenFileInput} style={{ display: 'none' }} onChange={onFileInputChanged} /> ) ``` 위와 같은 코드를 작성했다. 그런데 `onFileInputChanged` 함수는 순수함수가 아니라서 `uploadImages`가 외부에서 변경이 되면 side-effect가 생길 수도 있을 것 같다는 리뷰를 남겨주셨다. 그런데 `uploadImgaes`는 반드시 함수 내에서 사용해야하는 값이었다. 순수함수로 만들기 위해서 `uploadImgaes`를 매개변수로 전달을 해줘야 했다. 하지만 `onFileInputChanged`는 이벤트 핸들러에서 호출이 되는 것이기 때문에 직접 매개변수로 `uploadImgaes`를 전달해 줄 수 없었다. 따라서 완전히 모두 다 순수 함수로 만드는 것은 불가능했다. ```javascript= onChange={(event) => onFileInputChanged(event, uploadImages)} ``` 결국 위와 같이 순수함수가 아닌 부분이 있을 수 밖에 없었는데 최대한 그 범위를 축소하는데 의미가 있는 것 같다. [함수형 자바스크립트](https://book.naver.com/bookdb/book_detail.nhn?bid=13242075)의 1~2장 부분에 최대한 이 범위를 축소하는 방법이 나와있다고 한석님께서 말씀해주셔서 나중에 읽어보면 좋을 것 같다. ###### tags: `tech sharing`