React – это потрясающая библиотека, которая помогает разбить сложный пользовательский интерфейс на простые и многоразовые компоненты, которые можно скомпоновать вместе. Я покажу вам, как создать приложение react с нуля, используя SDK Stormpath React для добавления функций регистрации, входа в систему и просмотра профиля.
Давайте начнем!
Сначала вам нужно будет создать учетную запись и приложение Stormpath , что вы можете сделать здесь: https://api.stormpath.com/register
Этапы, которые мы собираемся охватить:-
- Установите React + Express.js Стек приложений
- Настройте реакцию + Express.js Проект
- Главная страница
- Индексная страница
- Страница входа в систему
- Страница регистрации
- Страница профиля
- Маршрут домой
- Выход из системы
- Состояние пользователя в компонентах
- Импорт Компонентов
- Запустите проект
- Завершая
Установите React + Express.js Стек приложений
В этом уроке мы будем использовать ES6 и JSX писать как можно меньше кода, а также Stormpath React SDK для пользовательских функций.
Вот краткое описание того, что мы будем использовать:-
- React – Позволяет нам создавать простые, но мощные пользовательские интерфейсы.
- ReactRouter – Организует навигацию по URL-адресам в нашем приложении React.
- ES6 – Следующая версия JavaScript. Позволяет нам писать реальные классы JavaScript.
- JSX – Позволяет нам размещать HTML в JavaScript без объединения строк.
- Stormpath – Позволяет нам хранить и аутентифицировать пользователей без необходимости создавать для этого собственный сервер.
- Stormpath React SDK – Интегрирует Stormpath в наше приложение React с минимальными усилиями.
- Экспресс – Позволяет нам обслуживать наши файлы HTML и JavaScript. Express Stormpath – Позволяет нам обслуживать API Stormpath через Express.
- Webpack – Позволяет нам упаковывать все наши файлы JavaScript в один пакет.
- Babel – Позволяет нам перенести ваши ES6 и JSX в ES5.
- Начальная загрузка – Потому что мы хотим, чтобы все было красиво.
Настройте реакцию + Express.js Проект
Создайте каталог, в котором будет находиться ваш проект
$ mkdir my-react-app $ cd my-react-app $ npm init --yes
Установите Express и модуль Stormpath для Express:
$ npm install --save express express-stormpath body-paser
Далее мы создадим сервер для размещения нашего приложения. Создать новый файл server.js и вставьте код ниже:
const express = require('express');
const stormpath = require('express-stormpath');
const app = express();
app.use(stormpath.init(app, {
web: {
produces: ['application/json']
}
}));
app.on('stormpath.ready', function(){
app.listen(3000, 'localhost', function(err){
if(err){
return console.error(err)
}
console.log('Listening at http://localhost:3000')
});
});
Хорошо, теперь мы можем продолжить и подключить это к приложению Stormpath, создав новый файл stormpath.yml со следующим кодом в нем. Обратите внимание, что вам нужно заменить эти значения в нем своими собственными.
client:
apikey:
id: YOUR_API_KEY_ID
secret: YOUR_API_KEY_SECRET
application:
href: https://api.stormpath.com/v1/applications/XXXX <-- YOUR APP HREF
Попробуйте запустить сервер, запустив $ node server.js . Если все настроено правильно, вы увидите:-
Listening at http://localhost:3000
Отлично, поднимите большой палец вверх за это. Вы заработали себе значок за то, что успешно настроили свой сервер для связи с Stormpath и предоставили API REST для вашего React.
Настройка веб-пакета
Двигаясь дальше быстро, завершите работу сервера, чтобы мы могли установить пакет Webpack. Как мы уже упоминали выше, Webpack будет упаковывать все наши клиентские скрипты. Скоро нам понадобится эта организация!
$ npm install --save webpack $ npm install --save-dev webpack-dev-middleware
Мы настроим Webpack, создав новый файл с именем webpack.config.js вставив код ниже:
const path = require('path');
const path = require('webpack');
module.exports = {
entry: [
'./src/app'
],
devtool: 'eval-source-map',
output: {
path: __dirname,
filename: 'app.js',
publicPath: '/js/'
},
module: {
loaders: []
}
};
Итак, давайте проанализируем этот код:- Что делает этот код, так это то, что он будет выглядеть в нашем /src/ каталог (мы его создадим) и упакуем все сценарии и их зависимости в этот каталог как один модуль. Затем используйте файл /src//src/ и его экспорт в качестве экспорта этого модуля. Затем, наконец, когда он сгенерирует этот пакет модулей, он будет обслуживать его через Express под /js/app.js конечная точка.
Для того, чтобы Express мог обслуживать файлы webpack, мы должны открыть server.js и добавьте эти строки в начало его:
const webpack = require('webpack');
const config = require('./webpack.config');
Затем сразу после строки const(); добавить:
const compiler = webpack(config);
app.use(require('webpack-dev-middleware')(compiler, {
noInfo: true,
publicPath: config.output.publicPath
}));
Опять же, это позволит Webpack перехватывать запросы и обслуживать наши упакованные /js/app.js файл.
Настройка Babel
Поскольку мы будем использовать ES6 и JSX, нам необходимо перенести эти файлы в ES5 (для обратной совместимости с несовременными браузерами). Вавилон делает это. Он принимает файлы ES6/JSX в качестве входных данных и преобразует их в ES5.
Итак, как обычно, мы собираемся установить пакет Babel
$ npm install --save babel-core babel-runtime babel-loader babel-plugin-react-transform \ babel-preset-es2015 babel-preset-react babel-preset-stage-0
Далее, как и в случае с Webpack, мы собираемся настроить babel. Создаем новый файл .babelrc и добавляем этот код:-
{
"presets": ["stage-0", "es2015", "react"]
}
Наконец, мы отредактируем webpack.config.js для того, чтобы Babel мог работать с нашим веб-пакетом. Мы добавим запись в модуль .погрузчики массив:
module: {
loaders: [{
test: /<.js$/,
loaders: ['babel'],
include: path.join(__dirname, 'src')
}]
}
Index.html и Начальная загрузка
Прежде чем глубоко погрузиться в React и промокнуть, мы создадим страницу входа для нашего приложения. Эта страница проинструктирует браузер о том, что он должен загрузить, прежде чем мы инициализируем React и наше приложение.
Начните с создания нового каталога сборка , внутри него создайте файл index.html . Наш сервер будет хранить все наши статические файлы из этой папки.
$ mkdir build $ cd build $ touch index.html
Внутри index.html , вставьте это:
Если вы используете код Visual Studio в качестве редактора, вы можете установить расширение Шаблон HTML5 для простого создания сценария.
Двигаясь дальше, в папке build создайте новый каталог css и загрузите в него файлы начальной загрузки.
$ mkdir css $ cd css $ curl -O https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css $ cd ../.. # return to /my-react-app
Хорошо, для того, чтобы ваш браузер мог получить доступ к этим файлам, нам нужно настроить их так, чтобы они обслуживались через Express. Откройся server.js и в верхней части файла добавьте:
const path = require('path');
Под строкой app.use(stormpath.init(приложение, ...)); добавить:
app.get('/css/bootstrap.min.css', function(req, res) {
res.sendFile(path.join(__dirname, 'build/css/bootstrap.min.css'));
})
app.get('*', function(req,res) {
res.sendFile(path.join(__dirname, 'build/index.html'));
});
Так , Как Работает React?
Теперь у нас есть скелет для нашего приложения, далее мы сосредоточимся на создании нашего приложения React. Но перед этим давайте попробуем понять React.
Компоненты
В React все построено на компонентах. Думайте о компоненте как об элементе DOM, например, Панель навигации, заголовок, форма входа в систему … и т.д. Компонент – это в основном то, что отображает узел DOM. Простой компонент React выглядит следующим образом:-
class FirstComponent extends React.Component {
render(){
return First Component
}
}
Чтобы отобразить этот компонент на странице, вам необходимо импортировать react, а затем вызвать его:
ReactDOM.render(, document.getElementById('first-component') );
И React будет отображать компонент для этого элемента.
Конечно, в компоненте React есть и другие функции, такие как состояние. Вот пример компонента счетчика, который начинает отсчет при добавлении в DOM и останавливается при удалении.
class Counter extends React.Component {
state = {
current: 0
}
constructor(){
super();
this.intervalId = null;
}
updateCounter(){
this.setState({current: this.state.current + 1})
}
componentWillMount(){
this.setState({ counter: this.props.from || 0 });
this.intervalId =
setInterval(this.updateCounter.bind(this), 1000);
}
componentWillUnmount(){
clearInterval(this.intervalId);
}
render(){
return { this.state.current }
}
}
Методы componentWillMount() и componentWillUnmount() являются методами жизненного цикла, которые будут выполняться в различных точках жизненного цикла компонента (в данном случае монтирование и размонтирование). Эти методы обычно используются для настройки и демонтажа компонента, и их необходимо использовать, потому что реакция приведет к ошибке, если вы попытаетесь установить состояние компонента, когда он еще не смонтирован.
Элемент this.props представляет собой набор всех свойств (входных данных), переданных компоненту. Свойства компонента можно задать, как показано ниже:
Переменные JSX
Переменные можно легко интерполировать в ваш JSX DOM, используя { имя переменной }, например, как показано ниже:
render(){
let myVariable = 123;
return { myVariable }
}
JSX и зарезервированные идентификаторы JavaScript
Поскольку JS – это JavaScript, есть некоторые предостережения, которые вам необходимо знать при работе с React. т.е. при настройке свойств компонента ReactDOM вы не можете использовать ни для , ни класса , поскольку они считаются зарезервированными идентификаторами JavaScript. Чтобы обойти эту проблему, React поставляется с htmlДля и имя класса , которое вы должны использовать вместо этого.
Чтобы проиллюстрировать проблему, это не сработает:
Но это будет:
Виртуальный ДОМ
Вместо того, чтобы работать непосредственно с DOM, в React все компоненты хранятся в их собственном виртуальном DOM. Вы можете думать о виртуальном DOM как о реализации DOM в JavaScript (потому что так оно и есть на самом деле). Затем этот виртуальный DOM сопоставляется с реальным элементом DOM. Поэтому, когда вы визуализируете свой компонент React, React посмотрит вывод DOM из компонента, сравнит его с его представлением в виртуальном DOM, а затем сгенерирует исправление для реального DOM.
Это означает, что вам больше никогда не придется думать о ручном управлении элементами DOM. Все, что вам нужно сделать, это сообщить React, как вы хотите, чтобы выглядел ваш компонент, и он позаботится о преобразовании DOM необходимыми способами (с минимальными усилиями).
Установка зависимостей React
Теперь, когда мы познакомились с React, мы начнем с установки некоторых зависимостей React:
$ npm install --save react react-dom react-router react-stormpath react-document-title history
Прежде чем мы начнем кодировать, нам нужно место для размещения наших файлов React, поэтому создайте новый каталог с именем src , а затем используйте его в качестве рабочего каталога.
$ mkdir src $ cd src
Теперь давайте начнем с точки входа в наше приложение. Это будет место, где мы настроим наше приложение React и его маршрутизацию. Поэтому создайте новый файл с именем app.js и введите этот код:
import React from 'react';
import ReactDOM from 'react-dom';
import { Router, IndexRoute, Route, browserHistory } from 'react-router';
ReactDOM.render(
,
document.getElementById('app-container')
);
Итак, теперь у нас есть основа для нашего приложения. Давайте продолжим и импортируем SDK Stormpath и некоторые вещи, которые нам понадобятся в нем. На вершине вашего app.js файл, добавьте инструкцию по импорту:
import ReactStormpath, { Router, HomeRoute, LoginRoute, AuthenticatedRoute } from 'react-stormpath';
Как вы можете видеть в Как вы можете видеть в теперь есть два конфликтующих Маршрутизатор импорт. Начиная с Пути реакции. Маршрутизатор расширяется от маршрутизатора React. Маршрутизатор нам это больше не понадобится. Так что продолжайте и удалите импорт маршрутизатора из react-маршрутизатора
Теперь мы инициализируем SDK Stormpath. Добавьте следующую строку прямо над ReactDOM.render() .
ReactStormpath.init()
Это было легко! Теперь мы готовы приступить к созданию наших страниц во второй части этого урока.
Оригинал: “https://dev.to/clintdev/authenticate-react-app-with-stormpath-3l1j”