{"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: 'Hello, **world**!' };\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>Input</h3>\n        <label htmlFor=\"markdown-content\">\n          Enter some markdown\n        </label>\n        <textarea\n          id=\"markdown-content\"\n          onChange={this.handleChange}\n          defaultValue={this.state.value}\n        />\n        <h3>Output</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        Hello {this.props.name}\n      </div>\n    );\n  }\n}\n\nReactDOM.render(\n  <HelloMessage name=\"Taylor\" />,\n  document.getElementById('hello-example')\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        Seconds: {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>TODO</h3>\n        <TodoList items={this.state.items} />\n        <form onSubmit={this.handleSubmit}>\n          <label htmlFor=\"new-todo\">\n            What needs to be done?\n          </label>\n          <input\n            id=\"new-todo\"\n            onChange={this.handleChange}\n            value={this.state.text}\n          />\n          <button>\n            Add #{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>JSX اختیاری است و نیاز به استفاده از ری‌اکت نیست. برای مشاهده کدی که در مرحله کامپایل JSX تولید می‌شود، <a href=\"https://babeljs.io/repl/#?presets=react&code_lz=MYewdgzgLgBApgGzgWzmWBeGAeAFgRgD4AJRBEAGhgHcQAnBAEwEJsB6AwgbgChRJY_KAEMAlmDh0YWRiGABXVOgB0AczhQAokiVQAQgE8AkowAUAcjogQUcwEpeAJTjDgUACIB5ALLK6aRklTRBQ0KCohMQk6Bx4gA\" target=\"_blank\" rel=\"noreferrer\">Babel REPL</a> را مشاهده کنید.</p>"}},{"node":{"fileAbsolutePath":"/vercel/workpath0/content/home/examples/a-stateful-component.md","fields":{"slug":"/home/examples/a-stateful-component.html"},"frontmatter":{"title":"یک کامپوننت دارای state","domid":"timer-example"},"html":"<p>علاوه بر داده‌های ورودی که توسط <code class=\"gatsby-code-text\">this.props</code> در اختیار یک کامپوننت قرار می‌گیرد، داده‌های state داخلی به‌وسیله <code class=\"gatsby-code-text\">this.state</code> قابل دسترسی و مدیریت می‌شود. هنگامی که داده‌های state یک کامپوننت تغییر می‌کند، خروجی جدید با فراخوانی مجدد تابع <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\">props</code> و <code class=\"gatsby-code-text\">state</code> می توان یک برنامه لیست کار‌ کوچک را ساخت. این مثال از <code class=\"gatsby-code-text\">state</code> برای نگهداری داده‌های لیست مواردی که باید انجام شود و همچنین متنی که کاربر وارد کرده‌است استفاده می‌کند. اگرچه event handler ها درون کد <code class=\"gatsby-code-text\">render()</code> تعریف شده‌اند، اما ری‌اکت آن‌ها را شناسایی و با استفاده از event delegation پیاده‌سازی می‌کند.</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>ری‌اکت به شما این امکان را می‌دهد که که با دیگر کتابخانه‌ها و فریم‌ورک‌ها اتصال برقرار کنید. این مثال با بهره‌گیری از <strong>remarkable</strong> که یک کتابخانه برای Markdown است، در لحظه متن <code class=\"gatsby-code-text\">&lt;textarea&gt;</code> را به خروجی HTML تبدیل می‌کند.</p>"}}]},"marketing":{"edges":[{"node":{"frontmatter":{"title":"خود توصیف کننده"},"html":"<p>ری‌اکت ساختن رابط‌کاربری پویا را ساده می‌کند. برای هر وضعیت برنامه خود یک view ساده طراحی کنید و هربار که داده‌های شما تغییر می‌کند، ری‌اکت به صورت بهینه‌‌ای، فقط کامپوننت‌های مربوطه را به‌روز رسانی و رندر می‌کند.</p>\n<p>viewهای خود توصیف کننده کد شما رو قابل پیش‌بینی و یافتن اشکال را آسان‌تر می‌کند.</p>"}},{"node":{"frontmatter":{"title":"بر‌پایه کامپوننت"},"html":"<p>کامپوننت‌هایی بسازید که state داخلی خود را، خودشان مدیریت می‌کنند و کپسوله شده‌اند.سپس با ترکیب آن‌ها رابط‌کاربری‌های پیچیده را بسازید.</p>\n<p>از آن‌جا که منطق یک کامپوننت به‌جای استفاده از قالب با جاوااسکریپت نوشته می‌شود، شما به‌راحتی می‌توانید داده‌هایی با ساختار متفاوت‌ را میان کامپوننت‌ها منتقل کنید و state کامپوننت‌ها را مستقل از DOM نگه‌دارید.</p>"}},{"node":{"frontmatter":{"title":"یک‌بار یاد بگیرید، همه‌جا استفاده‌ کنید"},"html":"<p>ما پیش‌فرضی درباره دیگر تکنولوژی‌های به‌کاررفته در پروژه شما نداریم، بنابراین می‌توانید قابلیت‌های جدید را با ری‌اکت بسازید.</p>\n<p>ری‌اکت روی سرور و همچنین به‌وسیله <a href=\"https://reactnative.dev/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ری‌اکت نیتیو</a> روی اپ موبایل هم رندر می‌شود.</p>"}}]}},"pageContext":{}},"staticQueryHashes":[]}