{"componentChunkName":"component---src-pages-index-js","path":"/","result":{"data":{"codeExamples":{"edges":[{"node":{"id":"a-component-using-external-plugins","code":"class MarkdownEditor extends React.Component {\n  constructor(props) {\n    super(props);\n    this.md = new Remarkable();\n    this.handleChange = this.handleChange.bind(this);\n    this.state = { value: 'Привіт, **світе**!' };\n  }\n\n  handleChange(e) {\n    this.setState({ value: e.target.value });\n  }\n\n  getRawMarkup() {\n    return { __html: this.md.render(this.state.value) };\n  }\n\n  render() {\n    return (\n      <div className=\"MarkdownEditor\">\n        <h3>Редактор</h3>\n        <label htmlFor=\"markdown-content\">\n          Введіть що-небудь в форматі Markdown\n        </label>\n        <textarea\n          id=\"markdown-content\"\n          onChange={this.handleChange}\n          defaultValue={this.state.value}\n        />\n        <h3>Вивід</h3>\n        <div\n          className=\"content\"\n          dangerouslySetInnerHTML={this.getRawMarkup()}\n        />\n      </div>\n    );\n  }\n}\n\nReactDOM.render(\n  <MarkdownEditor />,\n  document.getElementById('markdown-example')\n);\n","mdAbsolutePath":"/vercel/workpath0/content/home/examples/a-component-using-external-plugins.md"}},{"node":{"id":"a-simple-component","code":"class HelloMessage extends React.Component {\n  render() {\n    return (\n      <div>\n        Привіт, {this.props.name}\n      </div>\n    );\n  }\n}\n\nReactDOM.render(\n  <HelloMessage name=\"Петро\" />,\n  document.getElementById('hello-example'),\n);\n","mdAbsolutePath":"/vercel/workpath0/content/home/examples/a-simple-component.md"}},{"node":{"id":"a-stateful-component","code":"class Timer extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { seconds: 0 };\n  }\n\n  tick() {\n    this.setState(state => ({\n      seconds: state.seconds + 1\n    }));\n  }\n\n  componentDidMount() {\n    this.interval = setInterval(() => this.tick(), 1000);\n  }\n\n  componentWillUnmount() {\n    clearInterval(this.interval);\n  }\n\n  render() {\n    return (\n      <div>\n        Пройшло секунд: {this.state.seconds}\n      </div>\n    );\n  }\n}\n\nReactDOM.render(\n  <Timer />,\n  document.getElementById('timer-example')\n);","mdAbsolutePath":"/vercel/workpath0/content/home/examples/a-stateful-component.md"}},{"node":{"id":"an-application","code":"class TodoApp extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { items: [], text: '' };\n    this.handleChange = this.handleChange.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  render() {\n    return (\n      <div>\n        <h3>Список справ</h3>\n        <TodoList items={this.state.items} />\n        <form onSubmit={this.handleSubmit}>\n          <label htmlFor=\"new-todo\">\n            Що потрібно зробити?\n          </label>\n          <input\n            id=\"new-todo\"\n            onChange={this.handleChange}\n            value={this.state.text}\n          />\n          <button>\n            Додати #{this.state.items.length + 1}\n          </button>\n        </form>\n      </div>\n    );\n  }\n\n  handleChange(e) {\n    this.setState({ text: e.target.value });\n  }\n\n  handleSubmit(e) {\n    e.preventDefault();\n    if (this.state.text.length === 0) {\n      return;\n    }\n    const newItem = {\n      text: this.state.text,\n      id: Date.now()\n    };\n    this.setState(state => ({\n      items: state.items.concat(newItem),\n      text: ''\n    }));\n  }\n}\n\nclass TodoList extends React.Component {\n  render() {\n    return (\n      <ul>\n        {this.props.items.map(item => (\n          <li key={item.id}>{item.text}</li>\n        ))}\n      </ul>\n    );\n  }\n}\n\nReactDOM.render(\n  <TodoApp />,\n  document.getElementById('todos-example')\n);\n","mdAbsolutePath":"/vercel/workpath0/content/home/examples/an-application.md"}}]},"examples":{"edges":[{"node":{"fileAbsolutePath":"/vercel/workpath0/content/home/examples/a-simple-component.md","fields":{"slug":"/home/examples/a-simple-component.html"},"frontmatter":{"title":"Простий компонент","domid":"hello-example"},"html":"<p>Компоненти реалізують метод <code class=\"gatsby-code-text\">render()</code>, який приймає вхідні дані і повертає те, що буде показано користувачу. У цьому прикладі використовується XML-подібний синтаксис під назвою JSX. Доступ до вхідних даних, які передаються в компонент, можна отримати за допомогою <code class=\"gatsby-code-text\">render()</code> та <code class=\"gatsby-code-text\">this.props</code>.</p>\n<p><strong>JSX не є обов’язковим для React.</strong> Спробуйте <a href=\"https://babeljs.io/repl/#?presets=react&code_lz=MYewdgzgLgBApgGzgWzmWBeGAeAFgRgD4AJRBEAGhgHcQAnBAEwEJsB6AwgbgChRJY_KAEMAlmDh0YWRiGABXVOgB0AczhQAokiVQAQgE8AkowAUAcjogQUcwEpeAJTjDgUACIB5ALLK6aRklTRBQ0KCohMQk6Bx4gA\" target=\"_blank\" rel=\"noreferrer\">Babel REPL</a>, щоб побачити необроблений код JavaScript, створений на етапі компіляції JSX.</p>"}},{"node":{"fileAbsolutePath":"/vercel/workpath0/content/home/examples/a-stateful-component.md","fields":{"slug":"/home/examples/a-stateful-component.html"},"frontmatter":{"title":"Компонент зі станом","domid":"timer-example"},"html":"<p>У доповнення до прийняття вхідних даних (доступ до яких здійснюється через <code class=\"gatsby-code-text\">this.props</code>), компонент може зберігати дані внутрішнього стану (доступні через <code class=\"gatsby-code-text\">this.state</code>). Коли дані стану компонента змінюються, відбувається повторне відрендерення розмітки з використанням функції <code class=\"gatsby-code-text\">render()</code>.</p>"}},{"node":{"fileAbsolutePath":"/vercel/workpath0/content/home/examples/an-application.md","fields":{"slug":"/home/examples/an-application.html"},"frontmatter":{"title":"Застосування","domid":"todos-example"},"html":"<p>Використовуючи <code class=\"gatsby-code-text\">пропси</code> і <code class=\"gatsby-code-text\">стан</code>, ми можемо створити невеликий додаток для складання списку справ. Цей приклад використовує <code class=\"gatsby-code-text\">стан</code> для відстеження поточного списку елементів, а також тексту, введеного користувачем. Хоча обробники подій здаються вбудованими, вони будуть зібрані та реалізовані за допомогою методу делегування подій.</p>"}},{"node":{"fileAbsolutePath":"/vercel/workpath0/content/home/examples/a-component-using-external-plugins.md","fields":{"slug":"/home/examples/a-component-using-external-plugins.html"},"frontmatter":{"title":"Компонент, що використовує зовнішні модулі","domid":"markdown-example"},"html":"<p>React дозволяє взаємодіяти з іншими бібліотеками та фреймворками. У цьому прикладі використана <strong>дивовижна</strong> зовнішня бібліотека — Markdown, для зміни значення <code class=\"gatsby-code-text\">&lt;textarea&gt;</code> в реальному часі.</p>"}}]},"marketing":{"edges":[{"node":{"frontmatter":{"title":"Декларативний"},"html":"<p>React спрощує створення інтерактивних інтерфейсів. Вам потрібно лише описати, як різні частини інтерфейсу виглядають у кожному стані вашого додатку і React ефективно оновить та відрендерить лише потрібні компоненти, коли ваші дані зміняться.</p>\n<p>Декларативні інтерфейси роблять ваш код більш передбачуваним і його набагато легше налагоджувати.</p>"}},{"node":{"frontmatter":{"title":"Заснований на компонентах"},"html":"<p>Створюйте інкапсульовані компоненти, які керують власним станом, а з них будуйте складні інтерфейси.</p>\n<p>Оскільки логіка компонентів написана на JavaScript, замість шаблонів, ви з легкістю можете передавати складні дані у вашому додатку і зберігати стан окремо від DOM.</p>"}},{"node":{"frontmatter":{"title":"Вивчіть лише раз — пишіть будь-де"},"html":"<p>Ми не робимо припущень щодо стеку технологій які ви використовуєте, тому ви можете розробляти нові функції в React, не переписуючи існуючий код.</p>\n<p>React також може рендеритись на сервері, використовуючи Node, і приводити в дію мобільні додатки, які використовують <a href=\"https://reactnative.dev/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">React Native</a>.</p>"}}]}},"pageContext":{}},"staticQueryHashes":[]}