Надеюсь, у вас все хорошо.
У меня есть кнопка onclick, которая вызывает 2 функции, НО она не работает, и у меня нет никаких ошибок, отображаемых в консоли, поэтому я не знаю, в чем проблема.
Вот мой код
<div className="d-grid gap-2">
<Bouton btnCss = 'btn btn-success my-3'
click= { () => { this.props.handleSubmit; this.setState({begin : true})}}>
Commencer la tâche
</Bouton>
</div>
</form>
</>
)
}
}
export default withFormik({
mapPropsToValues : () => ({
tache : '',
unite : '',
commentaire : ''
}),
validationSchema : Yup.object().shape({
tache : Yup.number()
.required('Choisissez une tâche'),
unite : Yup.number()
.required('Choisissez une unite'),
commentaire : Yup.string()
.min(5, 'Le Texte est trop court')
.required('Veuillez entre un texte')
}),
handleSubmit : (values, {props, resetForm}) => {
resetForm();
props.validation(values.tache, values.unite, values.commentaire);
}
})
(taskForm)
Спасибо за помощь товарищи!
2 ответа
Вы не звоните своему this.props.handleSubmit
Должно быть this.props.handleSubmit()
Когда вы ранее вызывали свою функцию, вы использовали:
<Bouton click= {this.props.handleSubmit}>Commencer la tâche</Bouton>
Фактически вы передавали своему пользовательскому компоненту ссылку на функцию, которая будет вызываться при нажатии кнопки.
Затем кнопка вызывает функцию. Можно сказать, что функция onClick добавляет ()
Как если бы вы получали обратный вызов в своих аргументах:
const functionWithACallback = (callback) =>
{
// Do stuff
callback();
}
Однако теперь вы передаете анонимную функцию, которая будет вызываться при нажатии кнопки. Вы проходите:
() => {
this.props.handleSubmit;
this.setState({begin : true})
}
Однако здесь this.props.handleSubmit никогда не вызывается.
Также сделанные комментарии и другой ответ являются хорошей практикой, которой нужно следовать, а именно:
- Вы должны следовать соглашениям об именовании и называть обработчик нажатия кнопки
onClick
вместоclick
. - Вы должны создать отдельную функцию с именем
handleClick
и вызывать ее при нажатии кнопки, чтобы оператор return был как можно более компактным.
Почему бы вам не вызвать одну функцию, которая вызывает следующие две функции? Что-то вроде этого:
handleClick() {
function1();
function2();
}
<Bouton btnCss = 'btn btn-success my-3'
onClick= { () => { this.handleClick() }}>
Commencer la tâche
</Bouton>
Вы всегда можете добавить async/await
, если вам нужно дождаться завершения 1-го, прежде чем запускать 2-й. 🙂
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.
onClick
, но неclick
.