Почему мой обработчик onClick срабатывает несколько раз? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть родительский компонент <FilterGroupSection>, который создает коллекцию <RuleGroup /> дочерних компонентов:

return Object.values(this.props.filterGroups).map(function(ruleGroup) {
    const key = ruleGroup.id;
    return (
        <React.Fragment key={key}>
            <RuleGroup
                id={key} 
                key={key} 
                deleteRuleGroup={(e) => this.deleteRuleGroup(key, e)}
            />
            <Grid.Row></Grid.Row> {/*empty row to create space between filter groups*/}
        </React.Fragment>

    )
}.bind(this))

Это работает нормально и, как и ожидалось.

У меня проблемы сФункция-обработчик, передаваемая <RuleGroup />, deleteRuleGroup={(e) => this.deleteRuleGroup(key, e)}

В компоненте <FilterGroupSection /> функция обработчика компонента:

deleteRuleGroup(id, e) {
    console.log('delete rule group called')

    this.props.filterGroupDeleted({filterGroupId: id})
}

Я закомментировал this.props.filterGroupDeleted({filterGroupId: id}), и поведение было ожидаемымчто заставляет меня поверить, что функция запускается несколько раз при повторном рендеринге компонента.

В компоненте <RuleGroup /> функция deleteRuleGroup:

<Button                   
    color={"teal"} 
    size={"tiny"}
    onClick={(e) => this.props.deleteRuleGroup(id, e)}
>

При нажатии на кнопку,Функция-обработчик продолжает вызываться до тех пор, пока не отобразится ошибка RangeError: Максимальный размер стека вызовов .Как я могу гарантировать, что функция обработчика вызывается только один раз при нажатии кнопки?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...