Здравствуйте и добро пожаловать в еще одну историю, которая поможет вам понять, что такое React и как вы можете использовать его для создания красивых веб-приложений. В предыдущей главе мы провели некоторый рефакторинг и описали, что такое компонент props
. В этом разделе мы воспользуемся ими, чтобы добавить в приложение функцию удаления.
Пока наше приложение предоставляет пользователю возможность добавлять блюда в список, но он не может их удалить. Представьте, что наш пользователь XYZ добавит в список «бекон с мороженым», а затем решит: «Знаете, сегодня я буду есть здоровую пищу». Так что да, мы обязательно должны предоставить эту функциональность нашему приложению ради здоровья наших пользователей.
Сначала нам нужно расширить компонент MealPlanItem
с помощью кнопки, которая запускает удаление. И это все. Добавить кнопку в компонент очень просто.
Теперь нам нужно добавить к этой кнопке действие onClick
. Мы уже сделали что-то подобное, так что проблем быть не должно. Однако есть одна проблема, с которой мы должны столкнуться. Когда мы нажимаем кнопку, мы хотим внести изменения в состояние MealPlan
компонента, но на самом деле у нас нет к нему доступа. Внутри MealPlanItem
у нас есть доступ только к состоянию MealPlanItem
. Ну, это звучит жестко. Но что, если я скажу вам, что мы можем изменить состояние MealPlan
компонента, не имея к нему доступа. Что ж, мы действительно можем. И это будет выглядеть вот так.
Так будет выглядеть компонент MealPlanItem
. Идея в том, что MealPlanItem
на самом деле не знает, как изменить состояние. Он просто знает, что вызовет функцию handleDelete
при нажатии кнопки. Теперь нам просто нужно добавить эту функцию и передать ее MealPlanItem
в качестве свойства. Функция удаления еды из нашего состояния будет выглядеть так.
Теперь мы просто хотим передать эту функцию MealPlanItem
. Что ж, мы уже должны знать, как это сделать. Однако есть одна вещь, на которую следует обратить внимание. Мы не можем
<MealPlanItem handleDelete={this.removeMeal(meal)} meal={meal} />
потому что таким образом мы не передаем функцию в свойства props, а фактически сразу вызываем ее. Поэтому вместо этого мы хотим передать функцию, которая будет выглядеть так:
() => this.removeMeal(meal)
а затем наша окончательная форма MealPlan
компонента…
MealPlan
компонент умеет удалять еду из состояния. MealPlanItem
- это пустышка, которая знает, что должна вызывать функцию при нажатии кнопки. Когда MealPlan
компонент отображает MealPlanItem
компонентов, он передает каждому MealPlanItem
функцию. Эта функция удалит данное блюдо из списка блюд. И теперь наш пользователь может легко удалить «бекон с мороженым» из списка блюд и заменить его более полезным для здоровья вариантом.
Подводя итог тому, что мы сделали… Мы использовали свойства компонента для обновления состояния компонента вне самого компонента. В следующей главе мы рассмотрим наше приложение и исправим в нем некоторые проблемы.
Хорошо… спасибо за внимание. Если вам понравилась история, дайте знать всему миру, хлопнув в ладоши. Если вы не читали предыдущие рассказы этой серии, обязательно посмотрите их здесь. Если у вас есть комментарии, не стесняйтесь спрашивать в разделе комментариев. С радостью отвечу на любые ваши вопросы. Я сейчас ухожу. Оставайтесь с нами на выбранной вами частоте. Бернард… вон!