Я пытаюсь написать метод для динамической визуализации кнопок и пытаюсь избежать повторения кода с помощью метода renderButton. Я нигде не могу найти твердого решения этой проблемы, может кто-нибудь помочь? Я новичок, чтобы реагировать на родные
export default class DialogBoxStory extends PureComponent {
state = { isVisible: false, type: 'confirm' }
hide (type) {
return (payload = '') => {
this.setState({ isVisible: false })
console.debug(`hide ${type}`, payload)
}
}
show (type) {
return (payload) => {
this.setState({ isVisible: true, type })
console.debug(`show ${type}`, payload)
}
}
renderButtons () {
return [ 'confirm', 'alert', 'input' ]
.map((type) => (
<Button
title = {`show ${type} dialog`}
type = "primary"
onPress = {this.show(type)}
/>
))
}
render () {
const options = {
title: text('title', 'Test Title', 'props'),
message: text('message', lorem, 'props'),
onOkPress: this.hide('onOkPress'),
onCancelPress: this.hide('onCancelPress'),
isVisible: this.state.isVisible,
type: this.state.type,
onRequestClose: this.hide('onRequestClose'),
}
return (
<Fragment>
<DialogBox {...options} />
{this.renderButtons}
</Fragment>
)
}
}
нет! все еще не удается. Это связано с тем, как я возвращаю кнопки
вы пробовали после удаления этой строчки: {this.renderButtons()}? после этого работает?
Да! это все еще не работает
Можете попробовать добавить сюда return? return <Button title = {show $ {type} dialog} type = "primary" onPress = {this.show(type)} />
все равно не повезло. Я думаю, это как-то связано с сборником рассказов
если renderButtons не вызывает проблемы, ваш компонент DialogBox неисправен. попробуйте посмотреть только это в сборнике рассказов с ...options, который вы проходите здесь



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


Преобразуйте все объявления ваших методов (функций) в стрелочные функции, такие как show = () => {Your Function Body}
Вы должны вызвать функцию renderButtons {this.renderButtons()}
Также эта часть кода onPress = {this.show(type)} должна использовать метод bind() и передавать ключевое слово this в качестве первого параметра onPress = {this.show.bind(this, type)}.
это должен быть
{this.renderButtons()}