React-hook-Form,将值从一个SelectBox传递到另一个SelectBox

问题描述 投票:0回答:1

我发现这个简单的逻辑有问题。

我正在使用react-hook-form,我认为这应该很简单,但我仍在与它斗争一个多星期。

我正在使用 nextUI 组件

 <Checkbox
                className="mt-2 mb-5"
                radius="sm"
                checked={useResAddress}
                onValueChange={handleUseResAddressChange}
              >
                Use Residential Address
              </Checkbox>

此复选框为 true 时,应传递此选择框中的值

<Select
                  label="Residenntial Country"
                  placeholder="-Select Country-"
                  isRequired
                  radius="sm"
                  className="font-inter font-medium text-xl"
                  classNames={{
                    trigger: INPUT_STYLES,
                  }}
                  {...register('residenceCountry')}
                >
                  <SelectItem
                    key={'NG'}
                    value={'NG'}
                    classNames={{ title: ['font-inter'] }}
                  >
                    NG
                  </SelectItem>
                </Select>

将其传递给此,因为它们具有相同的值,所以应该可以工作。

<Select
                  label="Correspondence Country"
                  placeholder="-Select Country-"
                  isRequired
                  radius="sm"
                  className="font-inter font-medium text-xl"
                  classNames={{
                    trigger: INPUT_STYLES,
                  }}
                  {...register('correspondenceCountry')}
                >
                  <SelectItem
                    key={'NG'}
                    value={'NG'}
                    classNames={{ title: ['font-inter'] }}
                  >
                    NG
                  </SelectItem>
                </Select>

这就是执行此操作的函数

 function handleUseResAddressChange(isChecked: boolean) {
    setUseResAddress(isChecked);
    if (isChecked) {
      const residenceCountry = watch('residenceCountry');
      const residenceState = watch('residenceState');
      const residenceLocalGovernmentCode = watch(
        'residenceLocalGovernmentCode'
      );
      setValue('correspondenceCountry', residenceCountry);
      setValue('correspondenceState', residenceState);
      setValue(
        'correspondenceLocalGovernmentCode',
        residenceLocalGovernmentCode
      );
    } else {

      setValue('correspondenceCountry', '');
      setValue('correspondenceState', '');
      setValue('correspondenceLocalGovernmentCode', '');
    }
  }

问题是,它不起作用,直到我单击用户界面中的一个元素。

我面临的问题是切换 useResAdress 开关没有任何效果。该表格有两个部分,每个部分都包含在一个手风琴中。第一个输入字段位于第一个手风琴中,而第二个输入字段位于第二个手风琴中。当我切换 useResAdress 开关时,没有任何反应。但是,当我折叠并展开手风琴时,会出现值。我希望该值立即显示,而不必折叠和展开手风琴。

请大家帮忙!

reactjs typescript react-hook-form react-forms
1个回答
0
投票

在您的代码中,我首先注意到的是在同步函数体中调用的

watch
方法。
watch
返回一个有状态的值。我认为这个改变可能会有所帮助。

 function handleUseResAddressChange(isChecked: boolean) {
    setUseResAddress(isChecked);
    if (isChecked) {
      const [residenceCountry,residenceState,residenceLocalGovernmentCode  = 
         getValues(["residenceCountry", "residenceState", 
         "residenceLocalGovernmentCode"]);
      setValue('correspondenceCountry', residenceCountry);
      setValue('correspondenceState', residenceState);
      setValue(
        'correspondenceLocalGovernmentCode',
        residenceLocalGovernmentCode
      );
    } else {

      setValue('correspondenceCountry', '');
      setValue('correspondenceState', '');
      setValue('correspondenceLocalGovernmentCode', '');
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.