Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 안드로이드빌드에러
- TS
- meatadata
- 이진탐색
- 리액트네이티브아이콘
- 페이지네이션
- generic
- extends
- Spring
- mainapplication.kt
- materialicons
- 스크롤이벤트
- Next.js
- set
- 배열중복요소제거
- 슬라이딩윈도우
- map
- Filter
- supabase 페이지네이션
- app.post
- reactnative
- react
- app:compiledebugkotlin
- array
- 타입스크립트
- javascript
- async
- interface
- 상속
- 글또10기
Archives
- Today
- Total
rhanziy
React Native - input hidden 처럼 setValue하기(react-hook-form) 본문
하하 ~ 한때 잠시 했던 스프링과 jsp로 프로젝트를 진행하다가 리액트 네이티브를 하게되니,,,
사용자 인풋값을 처리하는 방식이 달라서 헷갈렸다!!
리뷰 댓글 기능을 만들다가 마주치게 된 에로사항인데, 일단 리뷰의 데이터타입은 이렇다.
interface IReview {
id: number;
rating: number;
content: string;
images: string[];
createdAt: string;
reviewer: {
id: number;
nickname: string;
profileImage: string;
};
store: {
name: string;
region: {
name: string;
};
};
product: {
name: string;
image: string;
};
children: IReview
}
리뷰id가 Primary Key이고 그 안에 children으로 댓글이 들어가는 구조.
그리고 댓글을 작성하고 완료버튼을 누르면 writeApi에 태워보낼 데이터는 이것임.
const writeReplyApi = async (params: WriteReplyParams) => {
await httpClient.post('/owner/review', params);
};
const {mutate: _write} = useMutation(writeReplyApi, {
onSuccess: () => {
Alert.alert('작성되었습니다.');
queryClient.invalidateQueries(queryKeys.reviews);
},
});
interface WriteReplyParams {
reviewId: number;
content: string;
}
구현하고 싶었던건 댓글을 작성할 리뷰를 클릭하면 reviewId값에 해당 리뷰 id가 박혔어야되는 것~!
그래서 구글링을 해봐따. react native input hidden으로 ......ㅋㅋ
그랬더니 useForm에서 제공하는 setValue를 통해 setValue('key','value')로 값을 set해줄 수 있다는 걸 알게댐.
// useWriteReplyForm.ts
const useWriteReplyForm = () => {
const {write} = useReply();
const {watch, setValue, resetField, ...methods} =
useForm<AddOwnerReplyFormFields>();
const canSubmit = watch('content').trim().length > 0;
const onSubmit = methods.handleSubmit(data => {
write({...data});
resetField('content');
});
return {...methods, setValue, onSubmit, canSubmit};
};
그 후 writeReplyItem.tsx에서
const WriteReplyItem: React.FC<Props> = ({reviewId}) => {
const [show, setShow] = useState(false);
const {onSubmit, canSubmit, setValue, ...methods} = useWriteReplyForm();
const toggle = useCallback(
(id: number) => {
setValue('reviewId', id);
setShow(prev => !prev);
},
[setValue],
);
return (
<View>
<Pressable
sentry-label="점주 댓글 달기 버튼"
onPress={() => {
toggle(reviewId);
}}>
<Text style={styles.replyBtn}>댓글달기</Text>
</Pressable>
{show && (
<View style={{marginTop: 10}}>
<FormInput
control={methods.control}
name="content"
autoFocus
maxLength={150}
showLength
multiline={true}
/>
<View style={{alignSelf: 'flex-end'}}>
<Button
sentry-label="점주 댓글 작성 완료 버튼"
size="small"
marginTop={8}
onPress={onSubmit}
variant="filled"
disabled={!canSubmit}>
작성 완료
</Button>
</View>
</View>
)}
</View>
);
};
버튼 누르면 실행되는 toggle에 해당 reviewId를 태워주고 setValue해주면 끗.~
리뷰아이템의 하단으로 writeReplyItem을 넣어줬기에 댓글달기 버튼을 누를 때마다 해당 review의 값이 셋팅된다.
'React Native' 카테고리의 다른 글
React Native - useDeferredValue로 추천 검색 리스트 노출하기(feat.debounce) (1) | 2024.04.25 |
---|---|
React Native - useAnimatedRef scrollToOffset 사용하기(타입스크립트) (1) | 2024.03.19 |
React Native - react hook form의 onsubmit에 파라미터로 입력값 넘기기!!! (1) | 2023.12.01 |
React Native - 아래로 끌어내려서 새로고침 RefreshControl (1) | 2023.11.23 |
React Native - 인풋이 키보드에 가려져요? KeyboardAvoidingView, KeyboardAwareFlatList (2) | 2023.11.23 |
Comments