@sergemin

Как работать с confirm в react?

Alert, prompt работают нормально, а confirm ошибку выдает? В чем особенность?

export default class App extends React.Component {
    constructor() {
        super();
        this.state = {
            todos: [
                {
                    title: 'First',
                    task: 'Wash car',
                    isDone: false,
                },
                {
                    title: 'Second',
                    task: 'Go to store',
                    isDone: false,
                }
            ]
        };
        this.deleteItem = this.deleteItem.bind(this);
    }
    deleteItem(event) {
        //Here I want to add confirm like that 
        // let conf = confirm('sure?'); if(conf) ...
        let number = event.target.parentNode.getAttribute('data-key');
        let newTodo = this.state.todos.slice();
        newTodo.splice(number, 1);
        this.setState({
            todos: newTodo,
        })
    }
    render() {
        return (
                <div>
                    <div className="header-app">
                        <h1>My ToDo app with React</h1>
                        <button onClick={this.showAddItem}>+</button>
                        <div className={(!this.state.isHidden ? 'hide_menu' : '') + " header-block"}>
                            <input id="title" type="text" placeholder="title"
                                   value={this.state.title}
                                   onChange={this.valueTitle}/>
                            <input id='task' type="text" placeholder="task"
                                   value={this.state.task}
                                   onChange={this.valueText}/>
                            <input id='submit' type='submit' value="Add"
                                    onClick={this.addItem}
                            />
                        </div>
                     </div>
                    <div className="body-app">
                        <div className="block-todo">
                            <div>
                                {this.state.todos.map((item, index) =>
                                    <div className={item.isDone ? 'opacity_small' : '' + ' itemTodo'} key={index} data-key={index}>
                                        <Title value={item.title} />
                                        <Task value={item.task}/>
                                        <Done onClick={this.isChecked} />
                                        <Remove onClick={this.deleteItem}/>
                                    </div>
                                )}
                            </div>
                        </div>
                    </div>
                    <div className="footer-app">
                        Footer
                    </div>
            </div>
        )
    }
}
  • Вопрос задан
  • 7352 просмотра
Решения вопроса 2
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Итого (из комментариев) у топик-стартера настроен eslint и + ошибка в коде.
Решение:
1) использовать window.confirm вместо confirm
2) передавать index (сейчас он у вас undefined)
Ответ написан
vahe_2000
@vahe_2000
взгляните сюда fiddle.вроде бы все нормально работает
deleteItem(event) {
    const conf = confirm(`Are you sure?`);
    let number = parseFloat(event.target.parentNode.getAttribute("data-key"));
    let newTodos = this.state.todos;
    if (conf) {
      newTodos = newTodos.splice(newTodos.indexOf(number), 1);
      this.setState({ todos: newTodos });
    } else {
      alert(`ok we won't delete it `);
    }
  }


а почему бы не падать index прямо из .map().было бы намного правильнее чем искать в атрибутах

React не рекомендуем вам хранить данные в DOM атрибутов. Даже если у вас есть, атрибуты данных, вероятно, являются более оптимальным подходом, но в большинстве случаев данные должны храниться в состояние компонента реагировать или внешние хранилища.

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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