Передайте initialValues ​​в пользовательский машинописный текст. - PullRequest
0 голосов
/ 09 июля 2020

У меня есть хук useForm, и я хотел использовать его во всех формах, вот что близко ниже, это то, что я делаю для передачи начальных значений, но это не работает Я новичок в машинописном тексте

interface IForm1 {
  name?: string;
  description?: string;
}
interface IForm2 {
  word?: string;
}

type FormTypes = IForm1 | IForm2;

const useForm = (initialState: FormTypes) => {
  const [values, setValues] = useState(initialState);
  return { values };
};

const work = () => {
  const [values] = useForm({
    word: '',
  });

  console.log(values.word);
};

1 Ответ

0 голосов
/ 09 июля 2020

Вам нужно сделать ваш хук общей функцией c, чтобы получить желаемое поведение.

interface IForm1 {
  name?: string;
  description?: string;
}
interface IForm2 {
  word?: string;
}

type FormTypes = IForm1 | IForm2;

const useForm = <T extends FormTypes>(initialState: T) => {
  const [values, setValues] = useState(initialState);
  return { values };
};

Кроме того, вам необходимо изменить возвращаемое значение, чтобы оно соответствовало вашей деструктуризации. Если вы планируете деструктурировать результат как массив const [values] = useForm(...), тогда вам нужно вернуть массив.

const useForm = <T extends FormTypes>(initialState: T) => {
  const [values, setValues] = useState(initialState);
  return [values];
};

Или, более кратко, если вы не против вернуть возможность setValues в звонящий

const useForm = <T extends FormTypes>(initialState: T) => useState(initialState);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...