Frontend/React
(18) React - selector modify
creativeDeveloper!
2023. 1. 25. 23:42
728x90
* selector를 이용해 minutes <=> hours 변환기 만들기
// App.tsx
import { useRecoilState } from "recoil";
import { minuteState, hourSelector } from "./atoms";
function App() {
// useRecoilState는 atom의 값에 더해서
// atom을 수정할 함수까지 준다
const [minutes, setMinutes] = useRecoilState(minuteState);
const [hours,setHours] = useRecoilState(hourSelector);
// atom이나 selector로 useRecoilState를 쓸때 결과
// array의 첫번째 item은 atom의 값이거나 selector의 get함수의값
const onMinutesChange = (event:React.FormEvent<HTMLInputElement>) =>
{setMinutes(+event.currentTarget.value)};
// 앞에 '+'를 붙이면 string=>number로 바꿀 수 있다.
// minutes는 number이기 때문에 바꾸는것
const onHoursChange = (event:React.FormEvent<HTMLInputElement>) =>
{setHours(+event.currentTarget.value)};
return (
<div>
<input type="number"
value={minutes}
onChange={onMinutesChange}
placeholder="Minutes"/>
<input value={hours}
type="number"
onChange={onHoursChange}
placeholder="Hours"/>
</div>
);
}
export default App;
// atoms.tsx
import { atom, selector } from "recoil";
export const minuteState = atom({
key: "minutes",
default:0,
});
export const hourSelector = selector<number>({
key: "hours",
get: ({get}) => {
// 같은 파일에 있는 atom을 이용할것이기 때문에 get을 통해 접근
const minutes = get(minuteState);
return minutes/60;
},
set: ({set},newValue) =>{
const minutes = Number(newValue)*60;
set(minuteState,minutes);
},
});
728x90