Реагировать - это не определено внутри компонента

У меня возникла проблема, когда я передаю значение из дочернего в родительский класс, оно работает, но когда я хочу передать его от родителя к «дедушке и бабушке», он сообщает мне, что «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

Нам нужно больше узнать о вашей функции render. Это было бы хорошо, как показано. Обновите свой вопрос, добавив минимальный воспроизводимый пример, демонстрирующий проблему, в идеале работоспособный, используя Stack Snippets (кнопка панели инструментов [<>]). Фрагменты стека поддерживают React, включая JSX; вот как это сделать.

T.J. Crowder 10.04.2018 17:13

Обратите внимание, что когда вы используете форму инициализатора свойств с функцией стрелки (ваш код updateApply = ...), this.updateApply = this.updateApply.bind(this); не нужен и бесполезен. Вы использовали стрелочную функцию, которая унаследует this (что вам и нужно). (Я предполагаю, что вы добавили bind, когда он не работал без него, но я подумал, что дам вам знать ...)

T.J. Crowder 10.04.2018 17:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать это:

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}/>

        }
    }));

}

Другие вопросы по теме