React onClick: невозможно прочитать свойство functionName из undefined

У меня есть кнопка, которую я пытаюсь нажать в своем компоненте React, который должен выполнять функцию с параметром, называемым «элемент», который определен в функции, возвращающей этот псевдо-HTML:

<div>{item.creationDate}</div>
        <PrimaryButton text={strings.LangPointer}
          onClick={() => this.emitComponentId(item)}/>

Когда я пытаюсь запустить это, появляется сообщение «Невозможно прочитать свойство emitComponentId of undefined.».

Я пробовал несколько решений, и ни одно из них не работает и выдает ту же ошибку:

onClick={this.emitComponentId.bind(this)}

Определение this.emitComponentId = this.emitComponentId.bind(this) в конструкторе компонента

() => this.emitComponentId(item).bind(this) -> даже не позволит мне скомпилировать, потому что 'void' не является приемлемым возвращаемым типом

Практически ничего из того, что я пробовал, не работает и всегда дает один и тот же результат.


person Grumbunks    schedule 25.05.2020    source источник
comment
Каков контекст первого кода выше? Это внутри render() {...}, что находится в export default class App extends React.Component {...} определении? Просто пытаюсь осознать это.   -  person HoldOffHunger    schedule 25.05.2020
comment
Он находится внутри функции renderTaskItem, которая вызывается атрибутом onRenderCell в render().   -  person Grumbunks    schedule 25.05.2020
comment
Хорошо, если вы добавите только код вызова? Только что просмотрел рабочий пример React, который у меня есть, вы называете его как return ( ... {this.renderOtherThing()} ....)? Кроме того, это единственная ошибка? Иногда более ранняя ошибка перерастает в другие ошибки.   -  person HoldOffHunger    schedule 25.05.2020
comment
да, это почти то, что я делаю. Я не думаю, что есть другие ошибки, потому что он отлично работает без функции onclick, это новая функция, над которой я работаю.   -  person Grumbunks    schedule 25.05.2020
comment
Просто откопал пример одного из моих onClick в React, у меня он настроен вот так, может, так будет лучше? onClick={(e) => this.handleClick(e)} (с событием?) Кроме того, handleClick(e) {...} находится в классе def, obv.   -  person HoldOffHunger    schedule 25.05.2020
comment
onClick={() => this.emitComponentId(item)}/> Может надо ....? onClick={(SomeItemArgumentHERE) => this.emitComponentId(item)}/>   -  person HoldOffHunger    schedule 25.05.2020
comment
в этом случае не будет ли аргумент, который я передаю, item в this.emitComponentId(item)?   -  person Grumbunks    schedule 25.05.2020
comment
Вы пытались определить и привязать свой метод в конструкторе компонентов?   -  person Bahtiyar    schedule 25.05.2020
comment
@Grumbunks: Да, что-то в этом роде. У меня не так уж много кода, чтобы знать, что это за элемент. Я пробовал сделать рабочую демонстрацию песочницы, используя ваш точный код, работает на 100%: codeandbox.io/s/react-example-gvjyd?file=/index.js Я заметил, что у вас есть собственный класс кнопок, PrimaryButton, может быть, проблема скрыта глубже?   -  person HoldOffHunger    schedule 25.05.2020
comment
@Bahtiyar да, я сделал. Я также попытался отключить PrimaryButton с помощью обычной кнопки HTML, и он по-прежнему дает мне тот же результат. Честно говоря, это действует мне на нервы.   -  person Grumbunks    schedule 25.05.2020
comment
Если вы не против, можете ли вы показать код в своем компоненте?   -  person Bahtiyar    schedule 25.05.2020
comment
Где и как определяется emitComponent? В компоненте, который отображает <div>? И это компонент класса?   -  person wintvelt    schedule 26.05.2020


Ответы (1)


Исправлено добавлением .bind(this) к вызову функции renderTaskItem()

person Grumbunks    schedule 26.05.2020