@Askme23

Как передать состояния от дочернего компонента к родителю на чистом React JS?

Здравствуй. Начал изучать React JS на примере реализации ToDo List-приложения. На данный момент реализовал возможность создания новых тасков и столкнулся с проблемой их удаления. Чтобы детально обрисовать суть проблемы, сначала приведу код где формируются сами таски.
class CreatorTasks extends Component {
    constructor(props) {
        super(props);

        this.createTask = this.createTask.bind(this);
        this.state = {
            components: [
            ]
        };
    }

    createTask() {        
        this.setState({
            components: this.state.components.concat([this.infoAboutTask()])
        });
        this.clearInputsAfterCreateTask();
    }

    infoAboutTask() {
        return {
            id: this.state.components.length + 1,
            taskName: document.getElementById('inputTaskName').value,
            taskDescription: document.getElementById('exampleFormControlTextarea1').value,
            taskImportance: document.getElementById('inputTaskImportance').value,
            taskFinishData: document.getElementById('inputFinishDate').value,
        };
    }

    clearInputsAfterCreateTask() {
        ['inputTaskName', 'exampleFormControlTextarea1', 'inputTaskImportance', 'inputFinishDate'].forEach((item) => document.getElementById(item).value = '');
    }

    render() {
        return (
            <div className="d-flex justify-content-between">
               // разметка
                <div className="newTask">
                    {
                        this.state.components.map((item) => (
                            <Task key={item.id} infoAboutTask={item} />
                        ))
                    }
                </div>
            </div>
        );
    }
}

Каждый таск формируется в зависимости от состояния меняющегося при нажатии на кнопку.
Мне кажется то, как я реализовал состояния в родительском компоненте не позволит адекватно удалить таски, может быть я и не прав. И все же главный вопрос - что я должен передать из дочернего компонента (компонента Task) в родительский, чтобы таск удалился.
Заранее спасибо )
  • Вопрос задан
  • 2887 просмотров
Решения вопроса 3
rockon404
@rockon404 Куратор тега React
Frontend Developer
Подход очень плохой. Писать так не надо. Для начала попробуйте изучить код типового Todo List на github и повторите. Думаю, после этого придет понимание почему и чем плох данный подход.
Давать рекомендации по данному куску === переписать весь код с нуля за вас.

Ключевые моменты:
1. Таски должны храниться в родительском компоненте.
2. В Task помимо задачи, надо передавать колбеки на изменение/удаление.
3. Никаких прямых обращений к DOM. Для решения вашей задачи даже без ref можно обойтись. Оперируйте состоянием.
Ответ написан
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Глава "Взаимодействие из ребенка с родителем", если гитбук не работает - ссылка на пдф/епаб есть на хабре
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы