Передача функции в класс реакции

это функция, которую я передаю классу реакции, используя контекстный api он должен возвращать некоторые значения. это работает так, как должно работать, когда Mobilebar является компонентом без сохранения состояния но когда я меняю Mobilebar на класс, это не работает. console.info(this.props) возвращает {addFilter: ƒ, removeFilter: ƒ, getOptions: undefined}

<MyContext.Provider value = {{
    getOptions: this.getOptions(),
    getItem: this.state.items,
    options: this.state.options,
    removeFilter: this.removeFilter.bind(this),
    addFilter: this.addFilter.bind(this)
}}>
    {this.props.children}
</MyContext.Provider>

 <MyContextConsumer>
        {({ getOptions, addFilter, removeFilter }) =>                 
            <Mobilebar
            addFilter = {addFilter}
            removeFilter = {removeFilter}
            getOptions = {getOptions} />
        }
 </MyContextConsumer>

Это функция

getOptions() {
  if ((this.state.catList &&
      this.state.brandList &&
      this.state.colorList) &&
    (this.state.catList.length != 0 &&
      this.state.brandList.length != 0 &&
      this.state.colorList.length != 0)) {
    return [
      [this.state.brandList],
      [this.state.catList],
      [this.state.colorList]
    ]
  }
}

Компонент

export class Mobilebar extends React.Component {
    constructor(props) {
        super(props)
        this.options = this.props.getOptions;
     
        this.brand = [];
        this.category = [];
        this.color = [];
        this.i = 0;
        this.options ?
        (
        this.brand = this.options[0][0], 
        this.category =his.options[1][0], 
        this.color = this.options[2][0]
        ) : this.i = 1;
    }
    render() {
      
        return (
            <div className = "itemlist" >
                <div >
                   <p>T_T_T_T</p>
                </div>
            </div>
        )
    }
}

Я не знаю, что делаю неправильно. Пожалуйста, помогите мне (это отлично работает, когда Mobilebar является компонентом без сохранения состояния) Есть ли проблема с тем, как я реализую эту функцию в классе? Почему console.info(this.props.getOptions) возвращает undefined !!!!! Спасибо за ваше время !!

Как вы, ребята, отметили, я пробовал привязать его вот так

 getOptions: this.getOptions.bind(this)

вызывая это в Mobilebar таким образом

 this.options = this.props.getOptions();

но console.info(this.props.options) по-прежнему undefined

вы не привязываете свои getOptions: this.getOptions (), как и другие функции, я думаю, это должно быть getOptions: this.getOptions.bind (this)

Ankush Sharma 27.10.2018 15:39

Вы вызываете его и передаете возвращаемое значение. Что может быть неопределенным из-за оператора if.

Dave Newton 27.10.2018 15:39

@AnkushSharma ну, я хотел просто выполнить функцию и вернуть значение. Я пробовал то, что ты сказал, но все еще не определен

xxxgrime 27.10.2018 16:07

@DaveNewton функция работает нормально, когда я использую ее в компоненте без сохранения состояния, хотя

xxxgrime 27.10.2018 16:11

Тогда вы делаете что-то по-другому, или данные другие и т. д. Вот почему у нас есть консольное ведение журнала и отладчики, если это непросто понять, взглянув на код.

Dave Newton 27.10.2018 16:36

@DaveNewton да, это было заявление if, спасибо !!

xxxgrime 27.10.2018 16:55

@xxxgrime Рад, что у вас все получилось :)

Dave Newton 28.10.2018 02:07
Поведение ключевого слова "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) для оценки ваших знаний,...
1
7
94
1

Ответы 1

Потому что вы выполняете функцию вместо ссылки.

Ссылайтесь на функцию так:

<MyContext.Provider value = {{
    getOptions: this.getOptions.bind(this),
    getItem: this.state.items,
    options: this.state.options,
    removeFilter: this.removeFilter.bind(this),
    addFilter: this.addFilter.bind(this)
}}>

Поскольку вы используете this, вам также потребуется связать его, как в моем примере.

извините за вводящий в заблуждение заголовок, но на самом деле я просто хотел выполнить функцию в контексте, чтобы вернуть значение

xxxgrime 27.10.2018 16:16

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