Я визуализировал список модальных/всплывающие окна и управляю ими с помощью состояния.
renderGenericOKModal({ title, message, visibleStateVar }) {
return (
<PromptModal
alertTitle = {title}
alertMessage = {message}
isVisible = {this.state[visibleStateVar]}
onRightButtonPress = {() =>
this.setState({ [visibleStateVar]: false });
}
rightButtonLabel = {strings.labelOK}
/>
);
}
Я вижу некоторые комментарии на Medium, в которых говорится, что приведенный выше код не оптимизирован, потому что он создает много ненужных похожих функций для onRightButtonPress. Итак, я попытался сделать что-то, как показано ниже, но не уверен, что это действительно имеет значение?
genericOKButtonOnPress = ({ visibleStateVar }) => {
this.setState({ [visibleStateVar]: false });
};
onRightButtonPress = {() =>
this.genericOKButtonOnPress({ visibleStateVar })
}
Но приведенный выше код по-прежнему создает каждый отдельный объект анонимной функции, который выглядит так же, как мой исходный код, верно?
ОБНОВЛЕНИЯ:
onRightButtonPress = {this.genericOKButtonOnPress.bind(null, {
visibleStateVar
})}
Использование bind должно быть полезным для моего случая, верно?



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


Определите onRightButtonPress, используя arrow function без анонимной функции.
onRightButtonPress = () => this.genericOKButtonOnPress({ visibleStateVar }) //inline
или
onRightButtonPress = () => {
this.genericOKButtonOnPress({ visibleStateVar })
} //using block
ПодсказкаМодал должен быть
<PromptModal
alertTitle = {title}
alertMessage = {message}
isVisible = {this.state[visibleStateVar]}
onRightButtonPress=this.onRightButtonPress
rightButtonLabel = {strings.labelOK}
/>
Но как передать переменную visibleStateVar?
visibleStateVar был передан в renderGenericOKModal и как я должен перейти в this.onRightButtonPress?
@ Исаак, ты настроил его state.this.setState({ [visibleStateVar]: false });
Я не понимаю, у onRightButtonPress нет доступа к visibleStateVar
bindсоздает другую функцию точно так же, какonRightButtonPress = {() => this.setState({ [visibleStateVar]: false }); }создает другую функцию, хотя