falbar Учим и разбираемся с React JS за 5 минут

Учим и разбираемся с React JS за 5 минут

18 ноября 2018 Перевод 248 0

Эта статья даст вам основные знания о React; пример, который мы будем использовать, - очень простое приложение. Я не буду говорить обо всем, что не кажется мне основным в понимании React JS.

Реклама

Первое использование React

Если вы только начали работать с React JS, используйте простейший способ: HTML-файл, который вносит библиотеки React и ReactDOM при помощи тегов script:

<html>
<head>
    <script src="https://unpkg.com/react@15/dist/react.min.js"> </script>
    <script src="https://unpkg.com/react-dom@15/dist/react-dom.min.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
    <div id="root"></div>
    <script type="text/babel">

    /*
        КОД REACT ДОБАВЛЯЕТСЯ СЮДА
    */

    </script>
</body>
</html>

Мы также перенесли Babel, ведь React применяет нечто под названием JSX для создания разметки. Нам нужно будет трансформировать этот JSX в привычный JavaScript, чтобы браузер мог понимать написанное.

Я хочу, чтобы вы обратили внимание на 2 вещи:

  • <div> с id #root - точка входа приложения. Тут будет «обитать» все созданное нами приложение;
  • Тег <script type="text/babel"> в теле кода. Здесь мы будем писать на React пример в виде кода.

Если вы хотите проделать эксперименты с кодом, обратитесь к этой песочнице Scrimba.

Компоненты

В React все состоит из компонентов, которые обычно имеют вид классов JavaScript. Написать компонент можно при помощи расширения рамок класса React-Component. Давайте напишем компонент Hello.

class Hello extends React.Component {
    render() {
        return <h1>Hello world!</h1>;
    }
}

Далее нужно определить методы компонента. В нашем примере будет рассматриваться лишь 1 метод - render().

Внутри render() нужно вернуть описание того, что вы хотите, чтобы React изобразил на странице. В нашем случае, который описан выше, мы просто хотим, чтобы программа отображала тег H1 с текстом «Hello world!».

Чтобы наше небольшое приложение показалось на экране, надо также прописать применение ReactDOM.render():

ReactDOM.render(
    <Hello />, 
    document.getElementById("root")
);

Здесь мы привязываем компонент Hello к точке входа приложения (<div id="root"></div>). Результат таков:

react-js-hello-world

Мы только что столкнулись с синтаксисом, который напоминает HTML, - <h1> и <Hello/>. Это код JSX, о котором упоминалось ранее. Это не чистый HTML, однако написанное превращается в теги HTML в DOM.

Следующий шаг - сделать так, чтобы приложение могло управлять данными.

Управление данными React JS

В React существует 2 вида данных: props и state. Разницу между ними поначалу немного трудно понять, так что не волнуйтесь, если вас эта информация сбивает с толку. Как только вы начнете работать с данными, все станет легче.

Ключевая разница состоит в том, что state имеют приватный характер и могут быть отредактированы непосредственно из компонента. Props - внешние данные, их не может контролировать компонент. Такие данные импортируются компонентами, которые стоят выше по иерархии и занимаются управлением иными данными.

Компонент может изменять внутренние данные типа state напрямую, в отличие от props.

Давайте сначала поподробнее рассмотрим props.

Props

Наш компонент Hello очень статичен; он всегда отображает одно и то же сообщение. Огромную роль в React играет возможность повторного использования, то есть: вы можете создать компонент 1 раз, а затем применять его в разных случаях - например, для высвечивания разных сообщений.

Чтобы достигнуть возможности повторного использования, мы добавим props. Вот так передаются данные типа props в компонент:

ReactDOM.render(
    <Hello message="my friend" />,
    document.getElementById("root")
);

Данные называются message и имеют значение «My friend». Мы можем получить доступ к этим данным в компоненте Hello при вызове this.props.message:

class Hello extends React.Component {
    render() {
        return <h1>Hello {this.props.message}!</h1>;
    }
}

В результате на экране получится вот это:

react-js-this-props-message

Мы пишем выражение {this.props.message} в фигурных скобках, так как нам необходимо сообщить JSX, что мы хотим использовать выражение на JavaScript. Такая методика получила название экранирования.

Теперь у нас есть компонент, который можно использовать повторно и который может показывать любое сообщение, какое мы захотим увидеть на странице. Ура!

А что если нам нужно использовать компонент, который сможет самостоятельно изменять свои данные? Тогда нужно использовать тип state!

State

Другой способ хранения данных в библиотеке React - в state компонента. В отличие от props, state могут изменяться компонентом напрямую.

Если вы хотите, чтобы данные в вашем приложении изменились (например, на основе команд пользователя), данные должны находиться в state компонента.

Инициализация state

Чтобы ввести state, просто поместите this.state в метод constructor() класса. Нашим state является объект, который в нашем случае имеет лишь 1 ключ - message.

class Hello extends React.Component {
    constructor(){
        super();
        this.state = {
            message: "my friend (from state)!"
        };
    }

    render() {
        return <h1>Hello {this.state.message}!</h1>;
    }
}

Перед тем как установить state, нужно вызвать super() в constructor. Это нужно сделать потому, что this не было определено до вызова super().

Изменение state «состояния»

Чтобы поменять значение state, просто вызовите this.setState(), используя новый объект state как аргумент. Мы сделаем это внутри метода updateMessage.

class Hello extends React.Component {
    constructor(){
        super();
        this.state = {
            message: "my friend (from state)!"
        };
        this.updateMessage = this.updateMessage.bind(this);
   }

    updateMessage() {
        this.setState({
            message: "my friend (from changed state)!"
        });
    }

    render() {
        return <h1>Hello {this.state.message}!</h1>;
    }
}
Замечание: чтобы все сработало, нам также было необходимо связать ключевое слово this с методом updateMessage. Иначе мы бы не смогли использовать this в методе.

Следующий шаг - создать кнопку, на которую можно будет нажимать, чтобы сработал метод updateMessage().

Добавим кнопку в методе render():

render() {
    return (
        <div>
            <h1>Hello {this.state.message}!</h1>
            <button onClick={this.updateMessage}>Click me!</button>
        </div>
    )
}

Здесь мы присоединяем к кнопке прослушиватель событий, который будет выслушивать событие onClick. Когда оно появляется, мы вызываем метод updateMessage.

Вот весь компонент:

class Hello extends React.Component {
    constructor(){
        super();
        this.state = {
            message: "my friend (from state)!"
        };
        this.updateMessage = this.updateMessage.bind(this);
    }

    updateMessage() {
        this.setState({
            message: "my friend (from changed state)!"
        });
    }

    render() {
        return (
            <div>
                <h1>Hello {this.state.message}!</h1>
                <button onClick={this.updateMessage}>Click me!</button>
            </div>
        )
    }
}

Затем метод updateMessage запускает this.setState(), который редактирует значение this.state.message. При нажатии кнопки получится такой результат:

react-js-this-props-message-done

Поздравляю! Рассмотрев React пример, вы научились важнейшим основам этой библиотеки.

Реклама
Комментариев еще не оставлено
no_avatar