簡體   English   中英

帶有 React Hook Form 的 Typescript 和 React-select 表單未提交的多個選定值

[英]Typescript with React Hook Form and React-select Multiple selected value not submitted by the form

我正在使用反應掛鈎形式並使用打字稿反應選擇。 它適用於單個選定值。 但是當我為多個選定值選擇 isMulti 時,我無法從提交的表單中獲取值。 這是代碼

 interface ITopic {
  value: string;
  label: string;
}

…………

const topicOptions : ITopic[] = [
    { value: 'javascript', label: 'JAVASCRIPT' },
    { value: 'php', label: 'PHP' },
    { value: 'python', label: 'PYTHON' },
    { value: 'java', label:'JAVA' },
    { value: 'C#', label: 'C#' }
]

type TopicType = { label: string, value: string }

const [selectedTopic, setSelectedTopic] = useState<readonly ITopic[]>([]);

…………

<Controller
   control={control}
   render={({ field: { onChange, value, name, ref } }) =>{
   const handleSelectionChange = (topicOptions: readonly SelectOptionType[]) => {
   setSelectedTopic(topicOptions)
   console.log(selectedTopic)
  }
   return  (
      <Select
      isMulti
      name={name}
      value={selectedTopic}
      options={topicOptions} 
      onChange={handleSelectionChange}
      />
  )}}
  name="topics"
/>   

我得到空主題值。 需要幫忙。 謝謝你。

首先,如果你使用react-hook-form來管理你的表單,你不應該另外為你的變量使用useState

您要做的是使用Controllerrender方法中的onChange

例如,我的多選代碼是(假設topicOptions是 TopicType 的數組TopicType: { label:string; value:string }

      <Controller
        control={control}
        name="topics"
        render={({ field: { onChange, value } }) => (
          <Select
            isMulti
            name="topics"
            options={topicOptions}
            value={topicOptions.filter((el) => value?.includes(el.value))}
            onChange={(option: TopicType[] | null) => {
              if (option === null) {
                onChange(null);

                return;
              }

              onChange(option.map((el) => el.value));
            }}
          />
        )}
      />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM