- PVSM.RU - https://www.pvsm.ru -
Сегодня, в заключительной части перевода курса по React, мы поговорим о современных возможностях React и обсудим идеи React-приложений, создавая которые, вы можете повторить то, чему научились, проходя этот курс, и узнать много нового.
→ Часть 1: обзор курса, причины популярности React, ReactDOM и JSX [2]
→ Часть 2: функциональные компоненты [3]
→ Часть 3: файлы компонентов, структура проектов [4]
→ Часть 4: родительские и дочерние компоненты [5]
→ Часть 5: начало работы над TODO-приложением, основы стилизации [6]
→ Часть 6: о некоторых особенностях курса, JSX и JavaScript [7]
→ Часть 7: встроенные стили [8]
→ Часть 8: продолжение работы над TODO-приложением, знакомство со свойствами компонентов [9]
→ Часть 9: свойства компонентов [10]
→ Часть 10: практикум по работе со свойствами компонентов и стилизации [11]
→ Часть 11: динамическое формирование разметки и метод массивов map [12]
→ Часть 12: практикум, третий этап работы над TODO-приложением [13]
→ Часть 13: компоненты, основанные на классах [14]
→ Часть 14: практикум по компонентам, основанным на классах, состояние компонентов [15]
→ Часть 15: практикумы по работе с состоянием компонентов [16]
→ Часть 16: четвёртый этап работы над TODO-приложением, обработка событий [17]
→ Часть 17: пятый этап работы над TODO-приложением, модификация состояния компонентов [18]
→ Часть 18: шестой этап работы над TODO-приложением [19]
→ Часть 19: методы жизненного цикла компонентов [20]
→ Часть 20: первое занятие по условному рендерингу [21]
→ Часть 21: второе занятие и практикум по условному рендерингу [22]
→ Часть 22: седьмой этап работы над TODO-приложением, загрузка данных из внешних источников [23]
→ Часть 23: первое занятие по работе с формами [24]
→ Часть 24: второе занятие по работе с формами [25]
→ Часть 25: практикум по работе с формами [26]
→ Часть 26: архитектура приложений, паттерн Container/Component [27]
→ Часть 27: курсовой проект [28]
→ Часть 28: современные возможности React, идеи проектов, заключение [1]
→ The end!
→ Оригинал [29]
Работой над библиотекой React занимается немало программистов в Facebook, вклад в проект делают и члены многочисленного сообщества, сложившегося вокруг React. Всё это ведёт к тому, что React очень быстро развивается. Например, если вы, изучая React в начале 2019 года, смотрели материалы по этой библиотеке, скажем, двухгодичной давности, вы не могли не заметить изменений, произошедших в React с момента выхода тех материалов. Например, в React 16.3 появились некоторые новые методы жизненного цикла компонентов, а некоторые методы были признаны устаревшими. А, скажем, в React 16.6 появилось ещё больше новых возможностей. Огромное количество новшеств ожидается в React 17.0 и в следующих версиях этой библиотеки.
Сейчас мы поговорим о некоторых современных возможностях React.
Многие из этих возможностей зависят от того, какая версия спецификации ECMAScript поддерживается инструментами, используемыми при разработке React-проекта. Скажем, если вы пользуетесь танспилятором Babel — это означает, что вам доступны самые свежие возможности JavaScript. При этом надо отметить, что при использовании в проектах неких возможностей JavaScript, ещё не включённых в стандарт, вы можете столкнуться с тем, что они, если будут включены в стандарт, могут измениться.
Одной из современных возможностей JavaScript, которой можно пользоваться при разработке React-приложений, является возможность объявления методов классов с использованием синтаксиса стрелочных функций.
Вот код компонента App
, который выводит на экран текстовое поле:
import React, {Component} from "react"
class App extends Component {
// Перепишем с использованием свойств класса
constructor() {
super()
this.state = {
firstName: ""
}
this.handleChange = this.handleChange.bind(this)
}
// Перепишем в виде стрелочной функции
handleChange(event) {
const { name, value } = event.target
this.setState({
[name]: value
})
}
render() {
return (
<main>
<form>
<input
type="text"
name="firstName"
value={this.state.firstName}
onChange={this.handleChange}
placeholder="First Name"
/>
</form>
<h1>{this.state.firstName}</h1>
</main>
)
}
}
export default App
Вот как выглядит страница этого приложения в браузере.
Приложение в браузере
Перепишем метод handleChange()
в виде стрелочной функции, приведя код компонента к следующему виду:
import React, {Component} from "react"
class App extends Component {
// Перепишем с использованием свойств класса
constructor() {
super()
this.state = {
firstName: ""
}
}
// Переписано в виде стрелочной функции
handleChange = (event) => {
const { name, value } = event.target
this.setState({
[name]: value
})
}
render() {
return (
<main>
<form>
<input
type="text"
name="firstName"
value={this.state.firstName}
onChange={this.handleChange}
placeholder="First Name"
/>
</form>
<h1>{this.state.firstName}</h1>
</main>
)
}
}
export default App
В ходе такого преобразования в код внесены небольшие изменения, но эти изменения оказывают серьёзное влияние на то, как будет работать метод. Ключевое слово this
в стрелочных функциях указывает на лексическую область видимости, в которой они находятся. Эти функции не поддерживают привязку this
. Эта особенность стрелочных функций ведёт к тому, что методы, объявленных с их использованием, не нужно привязывать к this
в конструкторе класса.
Ещё одна возможность, которую мы тут рассмотрим, заключается в использовании свойств классов. Сейчас мы, при инициализации состояния в конструкторе, пользуемся инструкцией this.state
. Так мы создаём свойство экземпляра класса. Теперь же свойства можно создавать за пределами конструктора. В результате можно преобразовать код следующим образом:
import React, {Component} from "react"
class App extends Component {
// Переписано с использованием свойств класса
state = { firstName: "" }
// Переписано в виде стрелочной функции
handleChange = (event) => {
const { name, value } = event.target
this.setState({
[name]: value
})
}
render() {
return (
<main>
<form>
<input
type="text"
name="firstName"
value={this.state.firstName}
onChange={this.handleChange}
placeholder="First Name"
/>
</form>
<h1>{this.state.firstName}</h1>
</main>
)
}
}
export default App
Обратите внимание на то, что тут мы избавились от конструктора, инициализировав состояние при объявлении соответствующего свойства. Всё [30] указывает на то, что эта возможность JS будет, в обозримом будущем, включена в стандарт.
Вот список материалов, посвящённых современным возможностям React.
В целом можно отметить, что, так как React развивается очень быстро, всем, кто занимается React-разработкой, рекомендуется постоянно наблюдать за новшествами этой библиотеки [38].
→ Оригинал [39]
В ходе освоения React мы с вами создали пару проектов — Todo-приложение и генератор мемов. Вполне возможно, что вы уже знаете — что хотите создать с использованием React. Может быть, вы уже разрабатываете собственное приложение. Если же вы пока не определились с выбором, и учитывая то, что практика — это лучший способ осваивать компьютерные технологии — вот [40], вот [41] и вот [42] — материалы, в которых вы найдёте целую кучу идей веб-приложений, которые можно создать с помощью React.
→ Оригинал [43]
Примите поздравления! Вы только что завершили изучение курса, посвящённого библиотеке React. Вы ознакомились с базовыми строительными блоками React-приложений, которые вы уже можете использовать для создания собственных проектов. Правда, если вы хотите создавать что-то с использованием React, будьте готовы к тому, что вам предстоит узнать ещё очень много нового.
Пройдёмся по основным концепциям, которые вы изучили в ходе освоения этого курса.
Благодарим за внимание!
Уважаемые читатели! Просим вас поделиться впечатлениями от этого курса и рассказать нам о том, что вы хотите разработать (или уже разрабатываете) с использованием React.
Автор: ru_vds
Источник [44]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/314980
Ссылки в тексте:
[1] Image: https://habr.com/ru/company/ruvds/blog/447134/
[2] Часть 1: обзор курса, причины популярности React, ReactDOM и JSX: https://habr.com/post/432636/
[3] Часть 2: функциональные компоненты: https://habr.com/post/433400/
[4] Часть 3: файлы компонентов, структура проектов: https://habr.com/post/433404/
[5] Часть 4: родительские и дочерние компоненты: https://habr.com/company/ruvds/blog/434118/
[6] Часть 5: начало работы над TODO-приложением, основы стилизации: https://habr.com/company/ruvds/blog/434120/
[7] Часть 6: о некоторых особенностях курса, JSX и JavaScript: https://habr.com/company/ruvds/blog/435466/
[8] Часть 7: встроенные стили: https://habr.com/company/ruvds/blog/435468/
[9] Часть 8: продолжение работы над TODO-приложением, знакомство со свойствами компонентов: https://habr.com/company/ruvds/blog/435470/
[10] Часть 9: свойства компонентов: https://habr.com/company/ruvds/blog/436032/
[11] Часть 10: практикум по работе со свойствами компонентов и стилизации: https://habr.com/company/ruvds/blog/436890/
[12] Часть 11: динамическое формирование разметки и метод массивов map: https://habr.com/company/ruvds/blog/436892/
[13] Часть 12: практикум, третий этап работы над TODO-приложением: https://habr.com/company/ruvds/blog/437988/
[14] Часть 13: компоненты, основанные на классах: https://habr.com/ru/company/ruvds/blog/437990/
[15] Часть 14: практикум по компонентам, основанным на классах, состояние компонентов: https://habr.com/ru/company/ruvds/blog/438986/
[16] Часть 15: практикумы по работе с состоянием компонентов: https://habr.com/ru/company/ruvds/blog/438988/
[17] Часть 16: четвёртый этап работы над TODO-приложением, обработка событий: https://habr.com/ru/company/ruvds/blog/439982/
[18] Часть 17: пятый этап работы над TODO-приложением, модификация состояния компонентов: https://habr.com/ru/company/ruvds/blog/439984/
[19] Часть 18: шестой этап работы над TODO-приложением: https://habr.com/ru/company/ruvds/blog/440662/
[20] Часть 19: методы жизненного цикла компонентов: https://habr.com/ru/company/ruvds/blog/441578/
[21] Часть 20: первое занятие по условному рендерингу: https://habr.com/ru/company/ruvds/blog/441580/
[22] Часть 21: второе занятие и практикум по условному рендерингу: https://habr.com/ru/company/ruvds/blog/443210/
[23] Часть 22: седьмой этап работы над TODO-приложением, загрузка данных из внешних источников: https://habr.com/ru/company/ruvds/blog/443212/
[24] Часть 23: первое занятие по работе с формами: https://habr.com/ru/company/ruvds/blog/443214/
[25] Часть 24: второе занятие по работе с формами: https://habr.com/ru/company/ruvds/blog/444356/
[26] Часть 25: практикум по работе с формами: https://habr.com/ru/company/ruvds/blog/446208/
[27] Часть 26: архитектура приложений, паттерн Container/Component: https://habr.com/ru/company/ruvds/blog/446206/
[28] Часть 27: курсовой проект: https://habr.com/ru/company/ruvds/blog/447136/
[29] Оригинал: https://scrimba.com/p/p7P5Hd/cvDkySN
[30] Всё: https://github.com/tc39/proposal-class-fields
[31] API Context: https://reactjs.org/docs/context.html
[32] Границы ошибок: https://reactjs.org/docs/error-boundaries.html
[33] Шаблон Render props: https://reactjs.org/docs/render-props.html
[34] Компоненты высшего порядка: https://reactjs.org/docs/higher-order-components.html
[35] Маршрутизатор React: https://reacttraining.com/react-router/core/guides/philosophy
[36] Хуки React: https://reactjs.org/docs/hooks-intro.html
[37] Новые возможности React 16.6: https://reactjs.org/blog/2018/10/23/react-v-16-6.html
[38] библиотеки: https://reactjs.org/
[39] Оригинал: https://scrimba.com/p/p7P5Hd/cdL88Sz
[40] вот: https://medium.freecodecamp.org/every-time-you-build-a-to-do-list-app-a-puppy-dies-505b54637a5d
[41] вот: https://medium.freecodecamp.org/want-to-build-something-fun-heres-a-list-of-sample-web-app-ideas-b991bce0ed9a
[42] вот: https://medium.freecodecamp.org/summer-is-over-you-should-be-coding-heres-yet-another-list-of-exciting-ideas-to-build-a95d7704d36d
[43] Оригинал: https://scrimba.com/p/p7P5Hd/czqvNAZ
[44] Источник: https://habr.com/ru/post/447134/?utm_source=habrahabr&utm_medium=rss&utm_campaign=447134
Нажмите здесь для печати.