У меня возникла проблема, когда я передаю значение из дочернего в родительский класс, оно работает, но когда я хочу передать его от родителя к «дедушке и бабушке», он сообщает мне, что «this» не определено, и я не могу передать функцию как «function = { this.functionName} '
Вот компонент, который вызывает у меня проблемы:
class MessageList extends Component {
constructor (props) {
super(props);
this.state = {
applyFor: ''
}
this.updateApply = this.updateApply.bind(this);
}
updateApply = (posName) => {
this.setState({
applyFor: posName
})
}...
и это моя функция рендеринга
render() {
return(
this.props.messages.map(function(message, index){
if (message.type === 'out') {
if (message.qType === 'quick reply'){
return (
<React.Fragment>
<BotTextMessage key = {index} message = {message.message.text} />
<FadeIn>
<QuickReplyWrapper key = {index} options = {message.message.options} />
</FadeIn>
</React.Fragment>
);
} else {
return <BotTextMessage key = {index} message = {message.message.text} />;
}
} else {
// console.info(this)
return <OpenPositionWrapper updateApply = {this.updateApply}/>
}
}));
}
когда я регистрирую это, он не определен, а для 'updateApply' он дает мне:
MessageList.js:65 Uncaught TypeError: Cannot read property 'updateApply' of undefined
Обратите внимание, что когда вы используете форму инициализатора свойств с функцией стрелки (ваш код updateApply = ...), this.updateApply = this.updateApply.bind(this); не нужен и бесполезен. Вы использовали стрелочную функцию, которая унаследует this (что вам и нужно). (Я предполагаю, что вы добавили bind, когда он не работал без него, но я подумал, что дам вам знать ...)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете попробовать это:
render() {
return(
this.props.messages.map((message, index) => {
if (message.type === 'out') {
if (message.qType === 'quick reply'){
return (
<React.Fragment>
<BotTextMessage key = {index} message = {message.message.text} />
<FadeIn>
<QuickReplyWrapper key = {index} options = {message.message.options} />
</FadeIn>
</React.Fragment>
);
} else {
return <BotTextMessage key = {index} message = {message.message.text} />;
}
} else {
// console.info(this)
return <OpenPositionWrapper updateApply = {this.updateApply}/>
}
}));
}
Нам нужно больше узнать о вашей функции
render. Это было бы хорошо, как показано. Обновите свой вопрос, добавив минимальный воспроизводимый пример, демонстрирующий проблему, в идеале работоспособный, используя Stack Snippets (кнопка панели инструментов[<>]). Фрагменты стека поддерживают React, включая JSX; вот как это сделать.