개발자

react-hook-form 및 react-table을 사용하면서 문제가 풀리지 않아서 질문드려요..

2024년 04월 26일조회 93

캠페인 데이터 안에 매체 데이터들이 있는데요. 매체 데이터의 이름으로 테이블을 만들고 테이블의 행을 클릭하면, 해당 행에 연관된 데이터를 보여주고, 수정이 가능한 폼?을 만들고있는데요. 캠페인 폼을 서브밋할 경우 매체에서 변경된 값은 정상적으로 콘솔에 찍히는데 테이블의 다른 매체를 선택해도 생성일이 변경되지 않는 문제가 있는데요.. 어떤게 문제인지 잘 모르겠습니다.. 첨부한 스크린샷에서 처럼 예를 들어.. 매체명11 - 생성일 5월1일 매체명22 - 생성일 5월2일 매체명33 - 생성일 5월3일... 이런식으로 데이터가 있다고하면 매체를 선택할때마다 생성일도 같이 변해야 되는데 변경이 안됩니다..ㅠ 폼 하나로 캠페인 및 캠페인 안에 있는 매체들의 데이터를 한번에 서브밋 하고싶어서 저런식으로 구성을했어요.. 뭐가 문제인지 도무지 모르겠어요.. 도와주세요!..

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 3

profile picture

익명

작성자

2024년 04월 26일

값은 실제로 서브밋할때 변경이 되지만, 화면상에서 다른 매체를 선택한 생성일로 표시가 안되는 문제입니다.ㅠ

profile picture

익명

작성자

2024년 04월 26일

useEffect(() => { if (selectedMedia && selectedMedia.billDate) { setValue(`medias.${selectedIndex}.billDate`, selectedMedia.billDate); } }, [selectedIndex, selectedMedia, setValue]); 이런식으로 선언을 하니깐, billDate는 변경이 되는데, 값이 10개 20개인 경우 일일히 하나씩 선언을 해줘야 하나요?... ㅠㅠ

profile picture

익명

작성자

2024년 04월 26일

아래 처럼 코드를 추가하니깐 테이블에서 매체를 선택할때마다 선택한 매체의 해당하는 값으로 변경이되고, 변경된 값도 적용이 잘 되는데, 초보자라 이게 맞는건지를 모르겠네요.. 도움 주실분 안계실까요?...

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
31
32
33
34
35
36
37
38
39
40
41
type CampaignMediaKeys = keyof CampaignMedia;
    type IndexedMediaKeys = `medias.${number}.${CampaignMediaKeys}`;

    useEffect(() => {
      if (selectedMedia) {
        Object.entries(selectedMedia).forEach(([key, value]) => {
          const fieldPath: IndexedMediaKeys = `medias.${selectedIndex}.${key}` as IndexedMediaKeys;
          setValue(fieldPath, value);
        });
      }
    }, [selectedMedia, selectedIndex, setValue]);

이런 코드를 추가하고,

<Controller
                        name={`medias.${selectedIndex}.billDate`}
                        control={control}
                        render={({ field: { onChange, value } }) => (
                          <DesktopDatePicker
                            format="yyyy-MM-dd"
                            value={value ? new Date(value) : null}
                            onChange={(newValue) => {
                              const formattedDate = newValue ? format(newValue, 'yyyy-MM-dd') : null;
                              onChange(formattedDate || null); // 새로운 값이 있으면 그 값을, 없으면 null을 설정
                              update(selectedIndex, { ...fields[selectedIndex], billDate:formattedDate!});
                            }}
                            slotProps={
                              {
                                textField: {
                                  label: '계산서 발행일',
                                  fullWidth: true,
                                  id: 'media-billDate'
                                },
                                actionBar: {
                                  actions: ['clear']
                                }
                              }
                            }
                          />
                        )}
                      />

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!