Как передать дополнительные параметры функции onChange в React

#reactjs #typescript #react-native

#reactjs #typescript #react-native

Вопрос:

Итак, я столкнулся с этой проблемой: у меня здесь есть элемент такого типа, очевидно, что при изменении входных данных происходит событие, возможно ли передать такие параметры, как это, и получить доступ к событию? если да, то как я мог это сделать?

 // this function accepts two other params index, stringValue
function onChange(index ,stringValue) {
    console.log(event.target.value);
    console.log("index?: "   index   " and value"   stringValue)
}

//this input is in Child Component
const index = 69;
const someRandomValue='iamstring';
<input defaultValue={name} onChange={onChange(index,iamstring)} />
  

Ответ №1:

Вы можете использовать функцию curried для ее реализации.

 onChange = (index, stringValue) => (event) => {
...
}

...

<input defaultValue={name} onChange={this.onChange(index,iamstring)} />
  

Ответ №2:

Вы можете преобразовать обработчик в обработанную функцию более высокого порядка, чтобы вернуть функцию, которая будет использоваться в качестве обратного вызова, которая принимает объект события щелчка

 function onChange(index,stringValue) {
  return (event) => {
    console.log(event.target.value);
    console.log("index?: "   index   " and value"   stringValue)
  };
}
  

Или вы можете передать объект события через обратный вызов, не забудьте добавить объект события в качестве аргумента в обработчик

 function onChange(event, index ,stringValue) {
    console.log(event.target.value);
    console.log("index?: "   index   " and value"   stringValue)
}

<input defaultValue={name} onChange={e => onChange(e, index, iamstring)} />
  

Ответ №3:

Если вы хотите, вы можете превратить onChange в функцию, которая возвращает другую функцию.

Тогда вы можете сделать что-то вроде этого:

 const Element = () => {
  const index = 69;
  const iamstring = 'iamstring';

  const onChange = (index, stringValue) => event => {
    console.log(event.target.value);
    console.log('index?: '   index   ' and value'   stringValue);
  };

  return <input defaultValue={name} onChange={onChange(index, iamstring)} />;
};

  

Имейте в виду, что onChange prop ввода ожидает функцию, поэтому вы можете выполнить функцию внутри onChange like this только в том случае, если эта функция возвращает другую функцию. (Это называется функцией более высокого порядка).