#javascript #reactjs
Вопрос:
У меня есть компонент React из выпадающего списка.
Когда выбирается какой-либо элемент списка, необходимо вызвать 2 функции, которые соответственно выполняют 2 действия:
- Значение должно быть опубликовано в API
- Также выберите некоторые другие действия, зависящие от раскрывающегося списка.
Я попробовал обе функции по одной в обработчике «onChange», они отлично работают по отдельности, но при совместном вызове это все испортило.
Мой код до сих пор выглядит так:
handleChange(e) {
e.preventDefault();
console.log("this is target's value: " e.target.value)
this.setState({value: e.target.value})
let fd = new FormData();
fd.append("value", e.target.value);
axios({
method: 'post',
url: `${api}/project/role`,
data: fd,
})
.then((data) => {
console.log(this.state)
})
Компонент визуализации в виде:
render() {
...
...
<><div style={{height:'7px'}}>Select from options:</div><br/>
<select value={this.props.role.prefer} onChange={(e) => this.props.selectedRoleAction(e.target.value)} className="form-control"> //The function placed right now in onChange is a action reducer function.
...
...
}
Теперь в onChange я хочу также вызвать handleChange, чтобы опубликовать значение в API. Как я могу этого достичь? Ценю любую помощь!
Комментарии:
1. да, это функция.
(e) => {thing1();thing2()}
Ты можешь делать в нем все, что захочешь.2. «Я также хочу вызвать handleChange, чтобы опубликовать значение в API» — похоже, ваша
handleChange
функция делает именно это. Но ваш компонент не вызываетhandleChange
функцию. Вы пробовали вызвать эту функцию? Что конкретно не удалось? Что вы пробовали и как это «все испортило»?3. Привет, Дэвид, я попытался вызвать handleChange индивидуально , как
this.handlechange
, что сработало нормально. Затем, собрав их вместе, какonChange={(e) => {this.props.selectedRoleAction(e.target.value) ; this.handleChange}}
. При выборе любого параметра он выдает ошибку как :TypeError: Cannot read property 'target' of undefined
4. Почему именно так? Вы могли бы просто поместить это.props.selectedRoleAction(например, целевое значение) в свою функцию handleChange
5. @Ankzious: Ну,
this.handleChange
это не то, как вы вызываете функцию. Ноthis.handleChange(e)
есть. Чтобы явно вызвать функцию, вам необходимо добавить круглые скобки, и если вы хотите передать этой функции какие-либо значения, вам необходимо включить их в круглые скобки. Мало чем отличается от любой другой функции, которую вы вызываете в своем коде…
Ответ №1:
Чтобы подвести итог решению, обсуждаемому в разделе комментариев:
Вызов 2(или многих других функций) просто сделайте (e) => {thing1();thing2()}
так, как предложил Чарльз.
Ответ на вышеприведенную проблему, который сработал, как предложил Дэвид. И о том, как вызвать 2 функции для вышеуказанной проблемы, — это принять событие для обеих функций, таких как:
<select value={this.state.value} onChange={(e) => this.props.selectedRoleAction(e.target.value) ; this.handleChange(e)} className="form-control">
Спасибо, ребята, за руководство. Спасибо за помощь!