Как вызвать метод класса в react из функции map в render?

Как мне вызвать функцию deletePoint из функции map в методе render? Спасибо за ваши ответы!

Текст ошибки сейчас: TypeError: Cannot read property 'deletePoint' of undefined

class SideBar extends Component {

    deletePoint = (obj) => { ... }

    render() {
        const points = this.props.markers;
        const point = points.map(function (obj, index) {
            return (
                <li key={index}>
                    {obj.address}
                    <button onClick={this.deletePoint(obj)}>Удалить точку</button>
                </li>
            )
        })

        return (
            <div>
                <div>
                    <ol>{point}</ol>
                </div>
            </div>
        )
    }
}
  • Вопрос задан
  • 1735 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Заменить колбек на стрелочную функцию:
const point = points.map((obj, index) => (
  <li key={index}>
    {obj.address}
    <button onClick={this.deletePoint(obj)}>Удалитьточку</button>
  </li>
));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Nere Автор вопроса
Frontend
Спасибо! Разобрался))

class SideBar extends Component {


    deletePoint = (obj) => {
        
        const text = 'Вы хотите удалить точку маршрута \'' + obj.address + '\'?';
        const result = window.confirm(text);

        if(result) {

            const markers = this.props.markers,
                routes = this.props.routes;

            for (let i = 0; i < markers.length; i++) {
                if (markers[i].address === obj.address) {
                    markers.slice(i,1);
                    routes.slice(i,1);
                }
            }

            this.props.deleteRoute(markers, routes)
        }
    }


    render() {
        const points = this.props.markers;
        const point = points.map((obj, index) => (
                <li key={index}>
                    {obj.address}
                    <button onClick={this.deletePoint.bind(this, obj)}>Удалить точку</button>
                </li>
            )
        )

        return (
            <div>
                <div>
                    <ol>{point}</ol>
                </div>
            </div>
        )
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы