React.js. Начало работы. Часть 1 из 12

12.10.2019

Теги: JavaScriptReact.jsWeb-разработкаКомпонентФреймворк

React — JavaScript библиотека для создания пользовательских интерфейсов. Она позволяет собирать сложный UI из маленьких изолированных кусочков кода, называемых «компонентами». Прежде чем создать первый компонент, создадим чистый документ React, не содержащий компонентов:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>React</title>
    <script src="https://unpkg.com/react@16.0.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.0.0/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
    <div id="container"></div>
    <script type="text/babel">
    ReactDOM.render(
        <div>
            <p>Привет, мир!</p>
        </div>,
        document.querySelector('#container')
    );
    </script>
<body>
</html>

Создаем компонент

Теперь создадим компонент HelloWorld:

<!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8">
    <title>React</title>
    <script src="https://unpkg.com/react@16.0.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.0.0/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
    <div id="container"></div>
    <script type="text/babel">
    class HelloWorld extends React.Component {
        render() {
            return <p>Привет, мир!</p>
        }
    }
    ReactDOM.render(
        <HelloWorld/>,
        document.querySelector('#container')
    );
    </script>
<body>
</html>

Компонент может принимать произвольные данные, которые называются свойствами:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>React</title>
    <script src="https://unpkg.com/react@16.0.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.0.0/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
    <div id="container"></div>
    <script type="text/babel">
    class HelloWorld extends React.Component {
        render() {
            return <p>Привет, {this.props.name}!</p>
        }
    }
    ReactDOM.render(
        <div>
            <HelloWorld name="Сергей"/>
            <HelloWorld name="Николай"/>
            <HelloWorld name="Андрей"/>
        </div>,
        document.querySelector('#container')
    );
    </script>
<body>
</html>

Компонент может иметь дочерние элементы:

<SomeComponent foo="bar">
    <p>Дочерний элемент</p>
</SomeComponent>

Доступ к дочернему элементу можно получить с помощью this.props.children:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>React</title>
    <script src="https://unpkg.com/react@16.0.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.0.0/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
    <div id="container"></div>
    <script type="text/babel">
    class SomeButton extends React.Component {
        render() {
            return (
                <button type={this.props.behavior}>{this.props.children}</button>
            );
        }
    }
    ReactDOM.render(
        <div>
            <SomeButton behavior="submit">Отправить данные</SomeButton>
        </div>,
        document.querySelector('#container')
    );
    </script>
<body>
</html>

Добавляем стили

Компоненты в React должны содержать внутри себя все, что необходимо им для работы, в том числе и стили. Это способствует повторному использованию компонентов в любом месте приложения.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>React</title>
    <script src="https://unpkg.com/react@16.0.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.0.0/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
    <div id="container"></div>
    <script type="text/babel">
    class Letter extends React.Component {
        render() {
            var style = {
                padding: "10px",
                margin: "10px",
                backgroundColor: "#FFDE00",
                display: "inline-block"
            };
            return (
                <div style={style}>
                    {this.props.children}
                </div>
            );
        }
    }
    ReactDOM.render(
        <div>
            <Letter>A</Letter>
            <Letter>B</Letter>
            <Letter>C</Letter>
        </div>,
        document.querySelector('#container')
    );
    </script>
<body>
</html>

<div>
    <div style="padding: 10px; margin: 10px; background-color: #FFDE00; display: inline-block;">A</div>
    <div style="padding: 10px; margin: 10px; background-color: #FFDE00; display: inline-block;">B</div>
    <div style="padding: 10px; margin: 10px; background-color: #FFDE00; display: inline-block;">C</div>
</div>

Сейчас все буквы черного цвета, сделаем их цветными:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>React</title>
    <script src="https://unpkg.com/react@16.0.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.0.0/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
    <div id="container"></div>
    <script type="text/babel">
    class Letter extends React.Component {
        render() {
            var style = {
                padding: "10px",
                margin: "10px",
                backgroundColor: "#FFDE00",
                display: "inline-block",
                color: this.props.color
            };
            return (
                <div style={style}>
                    {this.props.children}
                </div>
            );
        }
    }
    ReactDOM.render(
        <div>
            <Letter color="#FF0000">A</Letter>
            <Letter color="#00CC00">B</Letter>
            <Letter color="#0000FF">C</Letter>
        </div>,
        document.querySelector('#container')
    );
    </script>
<body>
</html>

Поиск: JavaScript • Web-разработка • Компонент • Фреймворк • React.js

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.